如何在不添加子列表的情况下将键值对添加到列表中?

问题描述

这可能是一个更简单的问题,但我似乎不知道该怎么做。 我有一个包含字符串的列表,例如

my_list = ["a_foo","b_foo"]

我有一个字典,键是字符串,我的值是包含字符串的列表,例如

my_dict = {"key_foo": ["a_bar"],"another_foo": ["c_bar","False"]}

我尝试编写一个列表推导式,当列表不包含“False”时,将所有键值对附加到我现有的列表中。就是这样

my_list.extend([[key,value] for (key,value) in my_dict.items() if 'False' not in value])

我得到输出 ["a_foo","b_foo",["key_foo",["a_bar"]]]。我完全理解为什么会发生这种情况,但是,我无法找到一种方法来使输出看起来像这样:["a_foo","key_foo",["a_bar"]]。有人可以解释一下怎么做吗?我真的很感激!

解决方法

这是为了执行此操作而对您的代码进行的修改:

my_list = ["a_foo","b_foo"]
my_dict = {"key_foo": ["a_bar"],"another_foo": ["c_bar","False"]}

[my_list.extend([key,value]) for (key,value) in my_dict.items() if 'False' not in value]

多行操作也可以:

my_list = ["a_foo","False"]}

for (key,value) in my_dict.items(): 
    if 'False' not in value:
        my_list.extend([key,value])

当您在多行中执行此操作时,现在更清楚为什么您的原始代码不起作用。这是因为前面的代码将每个键值对附加为一个元素,而我们想要实现的是将键和值附加为两个单独的元素。将 extend 方法移动到内部循环中可防止将键值对用作一个元素。

编辑:

这是如何通过“扁平化”数组而不是在列表理解中做到这一点

my_list = ["a_foo","False"]}

my_list.extend([i for pair in my_dict.items() for i in pair if "False" not in pair[1]])
,

您已接近列表推导式的结果。过滤掉不包含 'False' 的值后,您只需遍历元组 (key,values),即返回 key,然后返回 values

>>> my_list = ["a_foo","b_foo"]
>>> my_dict = {"key_foo": ["a_bar"],"False"]}
>>> my_list.extend([e for k,vs in my_dict.items() if 'False' not in vs for e in (k,vs)])
>>> my_list
['a_foo','b_foo','key_foo',['a_bar']]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...