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

Python 仅从列表中的词典中选择一些值,python,list,loops,dictionary,Python,List,Loops,Dictionary,我有这样的字典清单: 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:

我有这样的字典清单:

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

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

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

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

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

['AA2', 'CC1', 'CC2', 'BB']
如果您使用与其他颜色相同的格式将更多颜色添加到one_列表中,您将根据请求将其内部列表(如“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)

以下是另一种方法:

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

我不太明白您给定的代码如何将
'CC1'
'CC2'
添加到结果列表中。你的代码只有在字典键中有“真黑”的情况下才会起作用,否则就什么都没有了。那么一个单键目录列表呢?@GregHewgill我只需要为传入的特定颜色做这件事。SOP:你有很多可行的解决方案,但我必须是问为什么的泥中之棍?为什么要这样构造数据结构?这些东西是什么意思?创建一个
Color
类并创建一个对象列表,而不是一个单元素词典列表,这不是更好吗?@AdamSmith thanx Adam,我知道,但要求是不要使用类。如果在一个列表中有其他颜色,它会起作用吗?@user3761151,如果您以相同的形式添加除白色以外的其他颜色。应该这样。我添加了>>,{'blue':['AA3',['DD1','DD2']}>['AA1','BB','CC1','CC2','DD1','DD2']为什么要从列表中列出一个列表?@padraic我想你是在问关于非铅颜色列表的问题吧?它只是一个字典参考列表,没有选择任何铅颜色。我想我应该做一个生成器而不是列表,或者做一个>>如果lead\u color\u name不在x中,如果它们不是所有的字符串,为什么不使用
ret\u list=[]
?这只是字典值中的字符串和列表,可能这个版本更有效。我做了一些测试,发现这是一个坏习惯,
list()
花费的时间比
[]
多。
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']