2014-09-29 66 views
1
创建内部字典键的唯一列表

更好的方法在Python更好的方法来在Python

创造内部字典键的独特的名单上有字典如下:

users3 = {"David": {"Imagine Dragons": 3, "Daft Punk": 5, "Lorde": 4, "Fall Out Boy": 1}, 
      "Matt": {"Imagine Dragons": 3, "Daft Punk": 4, "Lorde": 4, "Fall Out Boy": 1}, 
      "Ben": {"Kacey Musgraves": 4, "Imagine Dragons": 3, "Lorde": 3, "Fall Out Boy": 1}, 
      "Chris": {"Kacey Musgraves": 4, "Imagine Dragons": 4, "Daft Punk": 4, "Lorde": 3, "Fall Out Boy": 1}, 
      "Tori": {"Kacey Musgraves": 5, "Imagine Dragons": 4,"Daft Punk": 5, "Fall Out Boy": 3}} 

(摄来自:http://guidetodatamining.com/

我的目标是在内部字典中的键之间创建“基于项目的相似性”矩阵。 我相信我有先产生内部字典唯一键的列表中,我使用下面的脚本来完成它:

def masterOfTitle(users3): 
    master_title = [] 
    for (users, ratings) in users3.items(): 
     for key in ratings.keys(): 
      if key not in master_title: 
       master_title.append(key) 
    return master_title 

最后,结果不出所料:

>>> titles = masterOfTitle(users3) 
>>> titles 
['Daft Punk', 'Kacey Musgraves', 'Lorde', 'Fall Out Boy', 'Imagine Dragons'] 
>>> 

CMIIW,至少对我(作为一个新手)Python的编程逻辑/流点点从任何其他我所学到的不同(C,德尔福/帕斯卡尔,VB) 是否有使用理解表达一个更好的办法? 请需要您的意见。

回答

1

使用sets收集独特的键:

def masterOfTitle(users3): 
    titles = set() 
    for nested in users3.itervalues(): 
     titles.update(nested) 
    return titles 

如果你真的想,你可以使用一组修真太:

def masterOfTitle(users3): 
    return {title for nested in users3.itervalues() for title in nested} 

您链接到这本书似乎是使用Python 2的实施例中(他们使用codecs.open()为Unicode编码/解码),所以我在可能的最有效的方式使用dict.itervalues()迭代值。

演示:

>>> masterOfTitle(users3) 
set(['Daft Punk', 'Fall Out Boy', 'Lorde', 'Kacey Musgraves', 'Imagine Dragons']) 
相关问题