繁体   English   中英

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

[英]How to Compare Two Dictionary Keys in Python?

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

例如,

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

比较键之后,打印

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

您可以迭代两个字典的键的交集,并在将两个字典映射到repr函数后打印两个字典的对应值,这将有助于引用字符串:

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

输出:

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

您需要两个字典的交集。

使用内置类型set

您可以为此使用内置类型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]))

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

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 
for key, val1 in dict_one.items():
    val2 = dict_two.get(key)
    if val2 is not None:
        print(val1, val2)

通过一个字典进行迭代,并检查另一个字典中是否存在密钥:

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

字典在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
def compare(dict1,dict2):
  keys1 = dict1.keys()
  keys2 = dict2.keys()
  for key in keys1:
    if key in keys:
      print(dict1[key],dict2[key])

使用交集。然后您可以从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')]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM