仅从列表中的字典中选择一些值

时间:2014-08-04 01:22:21

标签: python list loops dictionary

我有这样的词典列表:

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

我需要制作下一个:

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

所以我需要把[0]元素作为真正的黑色' ,那么来自[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']

3 个答案:

答案 0 :(得分:1)

所以,假设我得到了你要求的东西(Python 3.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)

end_list给了我(这就是你说的你想要的):

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

修改:我更新了代码,以便了解"线索"颜色,在这种情况下,你的铅颜色是"真正的黑色"。这样,如果您需要使用不同的颜色而不是真正的黑色,您可以轻松更改密钥。

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

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

如果您使用与其他颜色相同的格式向one_list添加更多颜色,您将获得其内部列表,例如' BB'或(' CC1和' CC2')按照您的要求附加到输出列表。

所以,根据你的评论,如果one_list如下:

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

end_list将是:

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

答案 1 :(得分:1)

怎么样?

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)

答案 2 :(得分:1)

以下是另一种方法:

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']