Python合并两个字典而不丢失顺序

don*_*nny 3 python dictionary

  • 我有一本包含UUID为如下文档生成的字典。
{
  "UUID": [
    "b8f2904b-dafd-4be3-9615-96bac8e16c7f",
    "1240ad39-4815-480f-8cb2-43f802ba8d4e"
  ]
}
Run Code Online (Sandbox Code Playgroud)
  • 另一个字典作为嵌套字典
{
  "R_Id": 304,
  "ContextKey": "Mr.Dave",
  "ConsolidationInformation": {
    "Input": [
      {
        "DocumentCode": "BS",
        "ObjectType": "Document",
        "InputContextKey": "Mr.Dave_HDFC.pdf2022-08-010T09:40:06.429358"
      },
      {
        "DocumentCode": "F16",
        "ObjectType": "Document",
        "InputContextKey": "Mr.Dave_F16.pdf2022-08-010T09:40:06.429358"
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)
  • 我想将UUIDby 索引添加到['ConsolidationInformation']['Input']个体Inputas中DocumentUUID,如何使用 for 循环映射它。我尝试在互联网上搜索,但找不到可以满足此嵌套条件的解决方案。
  • 预期产出
{
  "R_Id": 304,
  "ContextKey": "Mr.Dave",
  "ConsolidationInformation": {
    "Input": [
      {
        "DocumentCode": "BS",
        "ObjectType": "Document",
        "InputContextKey": "Mr.Dave_HDFC.pdf2022-08-010T09:40:06.429358",
        "DocumentUUID": "b8f2904b-dafd-4be3-9615-96bac8e16c7f"
      },
      {
        "DocumentCode": "F16",
        "ObjectType": "Document",
        "InputContextKey": "Mr.Dave_F16.pdf2022-08-010T09:40:06.429358",
        "DocumentUUID": "1240ad39-4815-480f-8cb2-43f802ba8d4e"
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)
  • 我尝试了类似下面的东西,但结果是
Traceback (most recent call last):
File "<string>", line 26, in <module>
KeyError: 0
Run Code Online (Sandbox Code Playgroud)
  • 代码
uuid = {
  "UUID": [
    "b8f2904b-dafd-4be3-9615-96bac8e16c7f",
    "1240ad39-4815-480f-8cb2-43f802ba8d4e"
  ]
}
document = {
  "R_Id": 304,
  "ContextKey": "Mr.Dave",
  "ConsolidationInformation": {
    "Input": [
      {
        "DocumentCode": "BS",
        "ObjectType": "Document",
        "InputContextKey": "Mr.Dave_HDFC.pdf2022-08-010T09:40:06.429358"
      },
      {
        "DocumentCode": "F16",
        "ObjectType": "Document",
        "InputContextKey": "Mr.Dave_F16.pdf2022-08-010T09:40:06.429358"
      }
    ]
  }
}
for i, document in enumerate(document):
    uuid = uuid[i]
    print(f"${uuid} for 1 {document}")
Run Code Online (Sandbox Code Playgroud)

小智 6

问题:您的尝试做得很好。唯一的问题是必须在正确的嵌套级别访问和添加这些值。

解决方案:您可以按如下方式更正您的尝试:

for i, doc in enumerate(document['ConsolidationInformation']['Input']):
    doc['DocumentUUID'] = uuid['UUID'][i]
Run Code Online (Sandbox Code Playgroud)

或者:您可以使用该zip功能。您可以在此处了解有关此功能的更多信息。

以下是如何将该函数应用到代码中的示例:

for u, doc in zip(uuid['UUID'], document['ConsolidationInformation']['Input']):
    doc['DocumentUUID'] = u
Run Code Online (Sandbox Code Playgroud)

输出:输出如下:

{
   "R_Id":304,
   "ContextKey":"Mr.Dave",
   "ConsolidationInformation":{
      "Input":[
         {
            "DocumentCode":"BS",
            "ObjectType":"Document",
            "InputContextKey":"Mr.Dave_HDFC.pdf2022-08-010T09:40:06.429358",
            "DocumentUUID":"b8f2904b-dafd-4be3-9615-96bac8e16c7f"
         },
         {
            "DocumentCode":"F16",
            "ObjectType":"Document",
            "InputContextKey":"Mr.Dave_F16.pdf2022-08-010T09:40:06.429358",
            "DocumentUUID":"1240ad39-4815-480f-8cb2-43f802ba8d4e"
         }
      ]
   }
}
Run Code Online (Sandbox Code Playgroud)