我有两个字典,例如dictionary1的顺序为:
{'id': '1234', 'Name': 'John', 'dob': '01/01/2001', 'Address': 'Long Street'}
而dictionary2例如被排序为:
{'id': '1235', 'dob': '01/01/2002', 'Address': 'Tower Street', 'Name': 'Michael'}
无论密钥的名称或数量如何,我都需要dictionary2的顺序与dictionary1的顺序相匹配,因为这可能会动态变化。
dictionary2应该变成:
{'id': '1235', 'Name': 'Michael', 'dob': '01/01/2002', 'Address': 'Tower Street'}
有办法做到这一点吗?我没有取得任何成功,也没有发现类似的问题。
非常感谢!
我个人不会这么做,而是将dict
转换为元组序列,或者使用OrderedDict
(如果只是为了显式的话(。
然而,如果您坚持这样做,并依赖Python 3.7+插入顺序的语义,这将起作用:
dict2 = {key: dict2[key] for key in dict1}
您评论说您正在使用它写入csv。如果您正在使用stdlib的csv
模块,DictWriter
可以提供帮助。
否则,另一种选择是按顺序提取它们,而不是逐个订购:
from operator import itemgetter
columns = tuple(dict1.keys())
extract = itemgetter(*columns)
dicts = [dict1, dict2, ...] # Fill this
for d in dicts:
values = extract(d)
# Use values
既然你说他们有相同的键。。。只需使用CCD_ 6的键/顺序和CCD_。
d2 = dict(zip(d1, map(d2.get, d1)))
如前所述,dict
s不按键执行任何类型的排序(它们可能按插入时间排序,具体取决于您使用的python版本(。
但是,您总是可以将dict表示为键值元组的列表:
d1 = {'id': '1234', 'Name': 'John', 'dob': '01/01/2001', 'Address': 'Long Street'}
d2 = {'id': '1235', 'dob': '01/01/2002', 'Address': 'Tower Street', 'Name': 'Michael'}
print(sorted(d1.items())) # [('Address', 'Long Street'), ('Name', 'John'), ('dob', '01/01/2001'), ('id', '1234')]
print(sorted(d2.items())) # [('Address', 'Tower Street'), ('Name', 'Michael'), ('dob', '01/01/2002'), ('id', '1235')]
您在评论中提到,需要将订单写入CSV文件。在这种情况下,忘记订单。csv.DictWritter
允许通过提供dict写入CSV文件,并根据列对其进行排序。
import csv
d1 = {'id': '1234', 'Name': 'John', 'dob': '01/01/2001', 'Address': 'Long Street'}
d2 = {'id': '1235', 'dob': '01/01/2002', 'Address': 'Tower Street', 'Name': 'Michael'}
with open('OUTPUT_FILE.csv', 'w', newline='') as f:
fieldnames = 'id', 'Name', 'dob', 'Address'
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader() # id,Name,dob,Address
writer.writerow(d1) # 1234,John,01/01/2001,Long Street
writer.writerow(d2) # 1235,Michael,01/01/2002,Tower Street