假设我们有一个包含单词列表的字典:在单个词典比较值 - Python的
temp = {"1": "hello", "2": "goodbye", "3": "hello", "4": "goodbye", "5": "hi"}
我需要帮助搞清楚如何来比较每个键的值。我知道我需要遍历每一个,但我不知道如何比较“1”到“2”的值,等等。
输出应该是:提前
"1" == "3" "2" == "4" "5" ==
感谢。
假设我们有一个包含单词列表的字典:在单个词典比较值 - Python的
temp = {"1": "hello", "2": "goodbye", "3": "hello", "4": "goodbye", "5": "hi"}
我需要帮助搞清楚如何来比较每个键的值。我知道我需要遍历每一个,但我不知道如何比较“1”到“2”的值,等等。
输出应该是:提前
"1" == "3" "2" == "4" "5" ==
感谢。
您可以执行以下操作。收集每个所有按键在lists
dict
(或defaultdict
):
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'
defaultdict(list)中的列表给了我一个TypeError,不可用类型:'list' – CM9
代码在这里工作。在原始的'dict'中是否有任何列表作为值? – schwobaseggl
是的,它们是单词列表 – CM9
一种方法是使用defaultdict
从collections
模块基本上反转字典(即使它类型旧值的 - >旧密钥列表指出它)。这可以如下实现:
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
你是什么意思与*比较*,我没有看到任何比较。 –
什么?它不是重复的问题 – Arman
@Arman,更正:dict ['1'] == dict [2'],但然后dict ['1'] == dict ['3'],其他的一样。我明白,但我只是把它放在那里作为一个例子。 – CM9