在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,delphi / pascal,vb)略有不同 是否有更好的方法使用理解表达? 请你的建议。
答案 0 :(得分: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'])