2014-09-29 46 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'])