比较 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'}
所需的输出是一个列表,如果键匹配,则匹配键的值将被添加到列表中。如果不匹配,则必须将 space 填充到列表中。例如,Age 在 dict2 中不可用,因此列表中的第二项应该是 space 并且输出顺序不应该改变。
[John, ,25k]
到目前为止,我尝试使用 for 循环来查找匹配的键,但不确定如何为不匹配的值填充 spaces 并保持 dict1 中的顺序。
如有任何帮助,我们将不胜感激。提前致谢
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)
您可以只使用列表推导来迭代 dict1
和 get
中的键作为默认值 dict2
或 " "
中的对应值。
>>> 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']
我有 2 部词典。
dict1={'Name':'','Age':'','Salary':''}
dict2={'Name':'John','Salary':'25k'}
所需的输出是一个列表,如果键匹配,则匹配键的值将被添加到列表中。如果不匹配,则必须将 space 填充到列表中。例如,Age 在 dict2 中不可用,因此列表中的第二项应该是 space 并且输出顺序不应该改变。
[John, ,25k]
到目前为止,我尝试使用 for 循环来查找匹配的键,但不确定如何为不匹配的值填充 spaces 并保持 dict1 中的顺序。
如有任何帮助,我们将不胜感激。提前致谢
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)
您可以只使用列表推导来迭代 dict1
和 get
中的键作为默认值 dict2
或 " "
中的对应值。
>>> 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']