返回列表字典中的值

时间:2018-08-20 00:45:06

标签: python python-3.x list dictionary

我正在使用Python 3.6

我有一个字典列表(如下),并且想为数据中的每个记录返回以下值:idnamecolor。我似乎无法弄清楚如何遍历数据集中的所有“页面”以返回所有值。我已经深入到下面包含的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'}

2 个答案:

答案 0 :(得分:1)

您有一个字典列表,而不是列表字典。因此,您可以使用嵌套的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'}]

答案 1 :(得分:0)

做这样的事情。

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个时,您才迭代字典的第一个索引。