如何在 Python 中从嵌套列表中获取特定值

How to get specific values from a nested list in Python

提问人:shaik khadar 提问时间:2/6/2023 最后编辑:shaik khadar 更新时间:2/6/2023 访问量:118

问:

你能帮我在下面的列表中获得我想要的特定值吗

list=[['Russia',[{'id': 250282,'d_id': 19553,'p_id': 1796,'value': 'silver'},
                {'id': 250212,'d_id': 19553,'p_id': 1896,'value': 'gold'},
                {'id': 250242,'d_id': 19553,'p_id': 1396,'value': 'iron'},
                {'id': 250082,'d_id': 19553,'p_id': 1496,'value': 'cobalt'}]],
      ['China',[{'id': 210282,'d_id': 193,'p_id': 1196,'value': 'silver'},
                {'id': 220212,'d_id': 193,'p_id': 1396,'value': 'iron'},
                {'id': 240242,'d_id': 193,'p_id': 1586,'value': 'iron'},
                {'id': 250082,'d_id': 193,'p_id': 1492,'value': 'gold'}]],
      ['Africa',[]],
      ['USA',[{'id': 200282,'d_id': 5531,'p_id': 1093,'value': 'iron'},
                {'id': 253212,'d_id': 5531,'p_id': 1843,'value': 'gold'},
                {'id': 255242,'d_id': 5531,'p_id': 1323,'value': 'iron'},
                {'id': 257082,'d_id': 5531,'p_id': 1409,'value': 'cobalt'}]],
      ['UK',[]]]


output should be:
  'Russia', 19553
  'China',  193
  'Africa', 0  
  'USA',    5531
  'UK',     0

我正在尝试获取 d_id 的国家/地区和唯一值,因为它对于所有记录都是相同的,并将缺失值插补为 0

我尝试了循环和列表切片,但没有任何效果 如果你们中的任何人对此有解决方案,将不胜感激。

输出应为: “俄罗斯”,19553 “中国”,193 '非洲', 0 '美国
', 5531 '英国', 0

在上面的输出中,非洲和英国d_id值补为 0

python list for-loop slice 键值

评论


答:

0赞 John R 2/6/2023 #1

下次你应该在你的问题上包括你尝试过的代码。

{l[0]: set([_d['d_id'] for _d in l[1]]) if len(l[1]) > 0 else set([0]) for l in your_list}

0赞 tdelaney 2/6/2023 #2

内部列表有 2 个值 - 国家/地区名称和记录列表。您可以使用元组扩展来迭代列表以获取这两个值。如果记录列表不为空,请获取第一个值,否则使用零。

list=[['Russia',[{'id': 250282,'d_id': 19553,'p_id': 1796,'value': 'silver'},
                {'id': 250212,'d_id': 19553,'p_id': 1896,'value': 'gold'},
                {'id': 250242,'d_id': 19553,'p_id': 1396,'value': 'iron'},
                {'id': 250082,'d_id': 19553,'p_id': 1496,'value': 'cobalt'}]],
      ['China',[{'id': 210282,'d_id': 193,'p_id': 1196,'value': 'silver'},
                {'id': 220212,'d_id': 193,'p_id': 1396,'value': 'iron'},
                {'id': 240242,'d_id': 193,'p_id': 1586,'value': 'iron'},
                {'id': 250082,'d_id': 193,'p_id': 1492,'value': 'gold'}]],
      ['Africa',[]],
      ['USA',[{'id': 200282,'d_id': 5531,'p_id': 1093,'value': 'iron'},
                {'id': 253212,'d_id': 5531,'p_id': 1843,'value': 'gold'},
                {'id': 255242,'d_id': 5531,'p_id': 1323,'value': 'iron'},
                {'id': 257082,'d_id': 5531,'p_id': 1409,'value': 'cobalt'}]],
      ['UK',[]]]


output = []
for name, records in list:
    if records:
        d_id = records[0]['d_id']
    else:
        d_id = 0
    output.append((name, d_id))

for name, d_id in output:
    print(f"    '{name}': {d_id}")
0赞 aman 2/6/2023 #3
for item in list:
    country = item[0]
    metal = item[1]
    d_id = []
    for details in metal:
        for ids in details:
            if ids == 'd_id':
                d_id.append(details[ids])
    d_id = set(d_id)

if len(d_id):
    print(f"{country},{d_id}")
else:
    print(f"{country},0")

评论

0赞 Community 2/8/2023
您的答案可以通过其他支持信息进行改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。