【问题标题】:Comparing Values in a Single Dictionary - Python比较单个字典中的值 - Python
【发布时间】:2017-02-06 15:45:47
【问题描述】:

假设我们有一本包含单词列表的字典:

temp = {"1": "hello", "2": "goodbye", "3": "hello", "4": "goodbye", "5": "hi"}

我需要帮助弄清楚如何比较每个键的值。我知道我需要遍历每个,但我不知道如何比较“1”和“2”的值,等等。

输出应该是:

"1" == "3" "2" == "4" "5" ==

提前致谢。

【问题讨论】:

  • compare 是什么意思,我没有看到任何比较。
  • 什么?它与重复的问题不同
  • @Arman,正确:dict['1'] == dict[2'],然后是 dict['1'] == dict['3'],其他的也一样.我明白,但我只是把它放在那里作为例子。
  • @MartijnPieters 这些重复项究竟如何?
  • @MartijnPieters 但是对于这个确切的问题,这种指数方法似乎远非最佳。

标签: python loops dictionary compare


【解决方案1】:

您可以执行以下操作。收集dict(或defaultdict)中每个lists的所有密钥:

from collections import defaultdict

temp = {"1": "hello", "2": "goodbye", "3": "hello", "4": "goodbye", "5": "hi"}
d = defaultdict(list)
for k, v in temp.items():
    d[v].append(k)

for k in d:
    print ' = '.join(repr(v) for v in d[k])  # repr only necessary to display quotes
    # print ' = '.join(d[k])
'5'
'1' = '3'
'2' = '4'

【讨论】:

  • list in defaultdict(list) 给了我一个 TypeError, unhashable type: 'list'
  • 代码在这里工作。在您的原始 dict 中是否有任何列表作为值?
  • 是的,它们是单词列表
  • 'd[v].append(k)' TypeError: unhashable type: 'list' is the error
  • 那么你应该把它放在问题中。你可以这样做:d[tuple(v)].append(k) 虽然
【解决方案2】:

一种方法是使用collections 模块中的defaultdict 从本质上反转字典(即使其类型为旧值 -> 指向它的旧键列表)。这可以通过以下方式实现:

from collections import defaultdict
inverted_dict = defaultdict(list)
for k,v in temp.items():
    inverted_dict[v].append(k)

然后旧字典中的每个值都显示为新字典中的一个键,您可以通过迭代 inverted_dict 并打印列表来打印“相等”键,例如:

for k,v in inverted_dict.items():
    print v

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多