我有以下两个词典列表:
list_1 = [
{'id': '1', 'name': 'Johnny Johson1'},
{'id': '2', 'name': 'Johnny Johson2'},
{'id': '1', 'name': 'Johnny Johson1'},
{'id': '3', 'name': 'Johnny Johson3'},
]
list_2 = [
{'id': '1', 'datetime': '2020-01-06T12:30:00.000Z'},
{'id': '2', 'datetime': '2020-01-06T14:00:00.000Z'},
{'id': '1', 'datetime': '2020-01-06T15:30:00.000Z'},
{'id': '3', 'datetime': '2020-01-06T15:30:00.000Z'},
]
从本质上讲,即使重复的ID代表不同的事件,我也不希望丢失数据(因为它们代表着不同的事件(不需要单独的ID,但是出于演示问题的目的)。如果一个列表中有任何ID,而另一列表中没有,则将其全部忽略。
理想情况下,我想得出以下结论(来自两个列表的合并):
list_3 = [
{'id': '1', 'name': 'Johnny Johson1', 'datetime': '2020-01-06T12:30:00.000Z'},
{'id': '2', 'name': 'Johnny Johson2', 'datetime': '2020-01-06T14:00:00.000Z'},
{'id': '1', 'name': 'Johnny Johson1', 'datetime': '2020-01-06T15:30:00.000Z'},
{'id': '3', 'name': 'Johnny Johson3', 'datetime': '2020-01-06T15:30:00.000Z'},
]
答案 0 :(得分:2)
您可以使用以下列表推导,该列表推导使用double asterisk关键字argent unpacking语法,并使用zip()获得的成对元素在两个列表上求值。这具有将两个词典合并为一个的效果。
[Setup]
AppName=P680
AppVerName=P680
DefaultDirName={pf}\P680
DefaultGroupName=P680
[Files]
Source: "P680.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "P680.ini"; DestDir: "{app}"; Flags: ignoreversion
Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme
Source: "ua18.dll"; DestDir: "{app}"; Flags: regserver restartreplace uninsrestartdelete
[Icons]
Name: "{group}\P680"; Filename: "{app}\P680.exe"
Name: "C:\Documents and settings\All Users\Start Menu\P680.exe"; Filename: "{app}\P680.exe"
[Registry]
#define RegistryKey "Software\Z820\P680"
Root: HKCU; SubKey: "{#RegistryKey}\Configuration\Interface"; ValueType: dword; Root: HKCU; SubKey: "{#RegistryKey}\Configuration\Interface"; ValueType: dword; ValueName: "P680Activated"; ValueData: 1; Flags: uninsdeletevalue
[Run]
Filename: "{app}\P680.exe"; Description: "P680 Application"; Flags: nowait postinstall
输出:
list_3 = [{**x, **y} for x, y in zip(list_1, list_2)]
请注意,这种方法至少需要Python 3.5。