如何在Python中比较两个字典键?

时间:2018-09-22 16:44:31

标签: python dictionary

我想比较python中的两个字典键,如果键相等,则打印它们的值。

例如,

dict_one={'12':'fariborz','13':'peter','14':'jadi'}
dict_two={'15':'ronaldo','16':'messi','12':'daei','14':'jafar'}

比较键后,打印

'fariborz', 'daei'
'jadi', jafar'

8 个答案:

答案 0 :(得分:3)

您可以遍历两个dict的键的交集,并在将它们映射到repr函数后打印两个dict的相应值,这将有助于引用字符串:

for k in dict_one.keys() & dict_two.keys():
    print(','.join(map(repr, (dict_one[k], dict_two[k]))))

这将输出:

'fariborz','daei'
'jadi','jafar'

答案 1 :(得分:1)

您可以将&运算符用于查找匹配的键

for i in d1.keys() & d2.keys():
    print("'{}', '{}'".format(d1[i], d2[i]))
~/python/stack/sept/twenty_2$ python3.7 alice.py
'fariborz', 'daei'
'jadi', 'jafar

答案 2 :(得分:0)

for key, val1 in dict_one.items():
    val2 = dict_two.get(key)
    if val2 is not None:
        print(val1, val2)

答案 3 :(得分:0)

通过一个字典进行迭代,然后检查另一个字典中是否存在键:

dict_one = {'12':'fariborz','13':'peter','14':'jadi'}
dict_two = {'15':'ronaldo','16':'messi','12':'daei','14':'jafar'}

for k in dict_one:
    if k in dict_two:
        print(dict_one[k], dict_two[k])


# fariborz daei
# jadi jafar

答案 4 :(得分:0)

字典在python中很不错,因为它们使我们可以非常轻松地查找键的值,并检查字典中是否存在键。

因此在您的示例中,如果您希望在字典之间的键相同时打印值,则可以执行以下操作:

dict_one={'12':'fariborz','13':'peter','14':'jadi'}
dict_two={'15':'ronaldo','16':'messi','12':'daei','14':'jafar'}

# Loop through all keys in dict_one
for key in dict_one:
    # Then check if each key exists in dict_two
    if key in dict_two:
        val1 = dict_one[key]
        val2 = dict_two[key]
        print('{},{}'.format(val1, val2))  # print out values with comma between them

答案 5 :(得分:0)

def compare(dict1,dict2):
  keys1 = dict1.keys()
  keys2 = dict2.keys()
  for key in keys1:
    if key in keys:
      print(dict1[key],dict2[key])

答案 6 :(得分:0)

您要查询两个词典的交集。

使用内置类型set

您可以为此使用内置类型set,它实现了intersection()函数。

您可以将列表变成这样的集合:

set(my_list)

因此,为了找到两个字典的键之间的交点,可以将键变成集合并找到交点。

要获取具有字典键的列表:

dict_one.keys()

因此,要找到两个字典的键之间的交集:

set(dict_one.keys()).intersection(set(dict_two.keys()))

在您的示例中,这将返回集合{'12', '14'}

上面的代码更具可读性:

keys_one = set(dict_one.keys())
keys_two = set(dict_one.keys())
same_keys = keys_one.intersection(keys_two)
# To get a list of the keys:
result = list(same_keys)

使用匿名函数(lambda函数)和列表理解

解决此问题的另一种简便方法是使用lambda函数。

如果您想知道的话,我将在此包括在内。可能不是最有效的方法!

same_keys = lambda first,second: [key1 for key1 in first.keys() if key1 in second.keys()]

所以,为了得到结果:

result = same_keys(dict_one,dict_two)

以上两种方法中的任何一种都将为您提供两个词典共有的键。

只需遍历它,然后执行您要打印的值即可:

for key in result:
    print('{},{}'.format(dict_one[key], dict_two[key]))

答案 7 :(得分:0)

使用交集。然后您可以从dict_onedict_two中获得相同的键值

这是我的代码:

dict_one={'12':'fariborz','13':'peter','14':'jadi'}
dict_two={'15':'ronaldo','16':'messi','12':'daei','14':'jafar'}
print([(dict_one[vals],dict_two[vals]) for vals in dict_one.keys() & dict_two.keys()])

输出

 [('fariborz', 'daei'), ('jadi', 'jafar')]