繁体   English   中英

返回列表字典中的值

[英]Return values in dictionary of lists

我正在使用 Python 3.6

我有一个字典列表(如下),并希望为我的数据中的每条记录返回以下值: idnamecolor 我似乎无法弄清楚如何遍历数据集中的所有“页面”以返回所有值。 我已经for下面包含的for循环,但它只返回第一页的数据,而没有返回其他页面的数据。 我正在寻找的最终状态将返回我在for循环中的结构中的数据,但对于所有页面。

我的数据和 for 循环:

mydict = [
  {
    "page": 1,
    "data":[
      {
        "id": 11111,
        "name": "smith",
        "color": "orange",
        "subsidiary": "no"
      },
      {
        "id": 22222,
        "name": "smith",
        "color": "orange",
        "subsidiary": "yes",
        "subsidiaries": [
          {
            "id": 33333,
            "name": "alpha",
            "color": "blue"
          },
          {
            "id": 44444,
            "name": "alpha",
            "color": "blue"
          }
    ],
    "last_updated": 123456789
      }
    ]
  },
  {
    "page": 2,
    "data":[
    {
      "id": 55555,
      "name": "smith",
      "color": "orange",
      "subsidiary": "no"
    },
    {
      "id": 66666,
      "name": "smith",
      "color": "orange",
      "subsidiary": "yes",
      "subsidiaries": [
        {
          "id": 77777,
          "name": "alpha",
          "color": "blue"
        },
        {
          "id": 88888,
          "name": "alpha",
          "color": "blue"
        }
  ],
  "last_updated": 987654321
    }
  ]
}
]

for i in mydict[0]['data']:
    print ({"cust_id": i['id'], "cust_name": i['name'], "fabric_color": i['color']})

返回:

{'cust_id': 11111, 'cust_name': 'smith', 'fabric_color': 'orange'}
{'cust_id': 22222, 'cust_name': 'smith', 'fabric_color': 'orange'}

你有一个字典列表,而不是一个列表字典。 所以你可以使用嵌套的for循环:

for d in mydict:
    for i in d['data']:
        print({"cust_id": i['id'], "cust_name": i['name'], "fabric_color": i['color']})

要将结果存储在字典列表中而不只是打印,您可以附加到列表:

L = []
for d in mydict:
    for i in d['data']:
        L.append({"cust_id": i['id'], "cust_name": i['name'], "fabric_color": i['color']})

更有效地,您可以使用等效的列表推导式:

L = [{"cust_id": i['id'], "cust_name": i['name'], "fabric_color": i['color']} \
     for d in mydict for i in d['data']]

print(L)

[{'cust_id': 11111, 'cust_name': 'smith', 'fabric_color': 'orange'},
 {'cust_id': 22222, 'cust_name': 'smith', 'fabric_color': 'orange'},
 {'cust_id': 55555, 'cust_name': 'smith', 'fabric_color': 'orange'},
 {'cust_id': 66666, 'cust_name': 'smith', 'fabric_color': 'orange'}]

这是一个捕获附属数据(如果存在)的示例:

L = []
for d in mydict:
    for i in d['data']:
        L.append({"cust_id": i['id'], "cust_name": i['name'], "fabric_color": i['color']})
    if 'subsidiaries' in i:
        for s in i['subsidiaries']:
            L.append({"cust_id": s['id'], "cust_name": s['name'], "fabric_color": s['color']})

print(L)

[{'cust_id': 11111, 'cust_name': 'smith', 'fabric_color': 'orange'},
 {'cust_id': 22222, 'cust_name': 'smith', 'fabric_color': 'orange'},
 {'cust_id': 33333, 'cust_name': 'alpha', 'fabric_color': 'blue'},
 {'cust_id': 44444, 'cust_name': 'alpha', 'fabric_color': 'blue'},
 {'cust_id': 55555, 'cust_name': 'smith', 'fabric_color': 'orange'},
 {'cust_id': 66666, 'cust_name': 'smith', 'fabric_color': 'orange'},
 {'cust_id': 77777, 'cust_name': 'alpha', 'fabric_color': 'blue'},
 {'cust_id': 88888, 'cust_name': 'alpha', 'fabric_color': 'blue'}]

做这样的事情。

mydict = []
for page in mydict:
    print(page['page'])
    for data in page['data']:
        print ({"cust_id": data['id'], "cust_name": data['name'], "fabric_color":data['color']})

当元素超过 1 个时,您只是在迭代字典的第一个索引。

暂无
暂无

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

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