从列表中的字典中选择部分值

2024-05-19 15:38:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的字典清单:

one_list = [{'true black': ['AA1', ['BB']]}, {'white': ['AA2', ['CC1', 'CC2']]}]

我需要制作下一个:

list = ['AA1', 'BB', 'CC1', 'CC2']

所以我需要取'true black'的[0]元素,然后取'true black'的[1]元素和所有其他字典的[1]元素中的所有元素

                for i in one_list:
                    if 'true_black' in i.keys():
                        for v in i.values():
                            container.append(v[0])
                            for v1 in v[1]:
                                pic_container.append(v1)

但我有点

 >>> ['AA1', 'AA2', 'BB', 'CC1', 'CC2']

Tags: intrue元素for字典containeronelist
3条回答

下面是另一种方法:

one_list = [{'true black': ['AA1', ['BB']]}, {'white': ['AA2', ['CC1', 'CC2']]}]

color = 'true black'
first = one_list[0][color]
new_list = [first[0], first[1][0]]
gen = (g for g in one_list if color not in g.keys())
for g in gen:
    for l in g.values():
        for n in l[1]:
            new_list.append(n)

print(new_list)

输出:

['AA1', 'BB', 'CC1', 'CC2']

所以,假设我得到了您所要求的(Python3.x的代码,特别是3.4):

lead_color_name = 'true black'

one_list = [{'true black': ['AA1', ['BB']]}, {'white': ['AA2', ['CC1', 'CC2']]}]

non_lead_colors = [x for x in one_list if lead_color_name not in x]

lead_color = [x for x in one_list if lead_color_name in x][0][lead_color_name]

end_list = []
end_list.append(lead_color[0])
end_list.extend(lead_color[1])
for x in non_lead_colors:
    end_list.extend(list(x.values())[0][1])
print(end_list)

清单的末尾给了我(这是你说你想要的):

['AA1', 'BB', 'CC1', 'CC2']

编辑:我更新了代码以说明“铅”的颜色,在这种情况下,铅的颜色是“真黑”。这样,如果你需要一个不同的颜色,而不是真正的黑色开始,你可以很容易地改变关键。你知道吗

例如,如果您希望您的铅颜色是白色而不是真正的黑色,结果将是

['AA2', 'CC1', 'CC2', 'BB']

如果您使用与其他颜色相同的格式将更多颜色添加到一个\u列表中,您将按照您的请求将它们的内部列表(如“BB”或(“CC1”和“CC2”)附加到输出列表中。你知道吗

因此,根据您的评论,如果其中一个列表如下所示:

one_list = [{'true black': ['AA1', ['BB']]}, {'white': ['AA2', ['CC1', 'CC2']]}, {'blue': ['AA3', ['DD1', 'DD2']]}]

结束列表将是:

['AA1', 'BB', 'CC1', 'CC2', 'DD1', 'DD2']

这个怎么样?你知道吗

one_list = [{'true black': ['AA1', ['BB']]}, {'white': ['AA2', ['CC1', 'CC2']]}]

ret_list = []

for i in one_list:
    if i.get("true black"):
        for j in list(i.values())[0]:
            if isinstance(j, list):
            ret_list += j
        else:
            ret_list.append(j)

    else:
        ret_list += i.popitem()[1][1]

print(ret_list)

相关问题 更多 >