繁体   English   中英

比较python中的2个字典并使用字典中的值创建一个列表

[英]Comparing 2 dictionaries in python and create a list with values from dictionary

我有2本字典。

dict1={'Name':'','Age':'','Salary':''}
dict2={'Name':'John','Salary':'25k'}

必需的输出是一个列表,如果键匹配,匹配键的值将被添加到列表中。 如果不匹配,则必须在列表中填充一个空格。 例如,Age 在 dict2 中不可用,因此列表中的第二项应该是空格并且输出顺序不应该改变。

[John, ,25k]

到目前为止,我尝试使用 for 循环来查找匹配的键,但不确定如何为不匹配的值填充空格并保持 dict1 中的顺序。

任何帮助将不胜感激。 提前致谢

您可以使用列表理解来迭代dict1的键并从dict2" " get相应的值作为默认值。

>>> dict1={'Name':'','Age':'','Salary':''}
>>> dict2={'Name':'John','Salary':'25k'}
>>> [dict2.get(key, " ") for key in dict1]
['John', '25k', ' ']

注意:这里使用 Python 3.5,所以dict1的顺序会搞砸。 使用OrderedDict

>>> dict1 = collections.OrderedDict([('Name',''),('Age',''),('Salary','')])
>>> [dict2.get(key, " ") for key in dict1]
['John', ' ', '25k']
dict1={'Name':'','Age':'','Salary':''}
dict2={'Name':'John','Salary':'25k'}
result = []
common = dict1.keys() & dict2
result = [dict1[k] or dict2[k] for k in common]
result.extend(' ' for k in set(dict1.keys()) - common)
result.extend(' ' for k in set(dict2.keys()) - common)

这段代码为我们提供了这两个字典之间的常用键和不常用键。 您可以根据需要使用它们。

dict1= {'Name':'','Age':'','Salary':''}
dict2= {'Name':'John','Salary':'25k'}

common_keys = set(dict1.keys()).intersection(dict2.keys())
un_common_keys = set(dict1.keys()).symmetric_difference(dict2.keys())

print(common_keys) # {'Name', 'Salary'}

print(un_common_keys) # {'Age'}

对于您的特定情况,您可以使用一个 for 循环:

all_keys = common_keys.union(un_common_keys)

final_list = []
for key in all_keys:
    if key in common_keys:
        final_list.append(dict2[key])
    else:
        final_list.append(" ")

print(final_list)

输出:

[' ', '25k', 'John']

如果顺序对您很重要,那么您必须使用@tobias_k 提到的有序字典。

(使用 Python 3.5)

暂无
暂无

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

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