在Python的内部字典中创建唯一键列表的更好方法

2024-06-16 12:08:42 发布

您现在位置: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、delphi/pascal、vb)都有些不同 有没有更好的方法使用理解表达?。 我需要你的建议。你知道吗


Tags: inmaster字典titleoutimagineboyfall
1条回答
网友
1楼 · 发布于 2024-06-16 12:08:42

使用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}

您链接到的那本书似乎在使用python2作为示例(他们使用codecs.open()进行unicode编码/解码),因此我使用dict.itervalues()以最有效的方式对值进行迭代。你知道吗

演示:

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

相关问题 更多 >