我想知道如何在字典中找到重复值并返回包含这些值的键。
所以这是一个例子:
d = {'happy':['sun', 'moon', 'chocolate'], 'sad':['fail', 'test', 'bills'], 'random': ['baloon', 'france', 'sun'] }
正如您所看到的那样,键快乐和随机具有相同/重复的值,即' sun&# 39; ,所以我要找的输出是:
random, happy
我真的不明白我怎么能找到像这样的重复值。
如果我有一个特殊的值,例如'巧克力',那么我可以使用d.keys()...来简单地进行for循环...
答案 0 :(得分:3)
超级快速和肮脏
d = {'happy':['sun', 'moon', 'chocolate'], 'sad':['fail', 'test', 'bills'], 'random': ['baloon', 'france', 'sun'] }
specific_word = 'bear' #uncomment to search for specific word
for key_a in d: #loop through the keys of d
for key_b in d: #loop a second time through the keys of d
if key_a == key_b: #if the keys are the same, skip it
break
for item in d[key_a]: #loop through items in d[key_a]
if (item in d[key_b]): #check if the item is in d[key_b]
#if you want to search ONLY for specific_word then this above if statement changes to this:
#if (item in d[key_b]) and item == specific_word:
print key_a,key_b #if u made it this far, print the keys
break # stop printing other stuff, in case of multiple matches
在定义形式中:(您应该总是尝试这样做)
def duplicate_dictionary_check(d,specific_word=''):
for key_a in d:
for key_b in d
if key_a == key_b:
break
for item in d[key_a]:
if (item in d[key_b]):
if specific_word:
if specific_word == item:
print key_a,key_b,"found specific word:", specific_word
print key_a,key_b,"found match:",item
然后你就可以玩这个了
d = {'happy':['sun', 'moon', 'chocolate'], 'sad':['fail', 'test', 'bills'], 'random': ['baloon', 'france', 'sun'] }
duplicate_dictionary_check(d)
# or
duplicate_dictionary_check(d,'sun')
答案 1 :(得分:1)
import collections
d = {'happy':['sun', 'moon', 'chocolate'], 'sad':['fail', 'test', 'bills'], 'random': ['baloon', 'france', 'sun'] }
w = collections.defaultdict(list)
for k,v in d.iteritems():
for i in v: w[i].append(k)
print [l for l in w.itervalues() if len(l)>1]
给出:
[['random', 'happy']]
答案 2 :(得分:0)
如果您使用的是Python 3,则应输出任何重复的元组:
Duplicates = [(i,j) for i in d for j in d if (d[i]==d[j]).all() and i != j]