如何在不添加子列表的情况下将键值对添加到列表中?
How to add key-value pairs to a list without adding sublists?
这可能是一个更简单的问题,但我似乎不知道如何去做。
我有一个包含字符串的列表,例如
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", "b_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", "b_foo"]
my_dict = {"key_foo": ["a_bar"], "another_foo": ["c_bar", "False"]}
for (key, value) in my_dict.items():
if 'False' not in value:
my_list.extend([key, value])
当您在多行中执行此操作时,现在您的原始代码无法运行的原因就更清楚了。因为之前的代码是将每个键值对作为一个元素进行追加,而我们想要实现的是将键和值作为两个单独的元素进行追加。将 extend
方法移动到内部循环可防止将键值对用作一个元素。
编辑:
这是通过“扁平化”数组来实现列表理解的方法
my_list = ["a_foo", "b_foo"]
my_dict = {"key_foo": ["a_bar"], "another_foo": ["c_bar", "False"]}
my_list.extend([i for pair in my_dict.items() for i in pair if "False" not in pair[1]])
您已接近列表推导式的结果。一旦过滤了不包含 'False'
的值,您只需遍历元组 (key, values)
,即 return key
然后 values
:
>>> my_list = ["a_foo", "b_foo"]
>>> my_dict = {"key_foo": ["a_bar"], "another_foo": ["c_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']]
这可能是一个更简单的问题,但我似乎不知道如何去做。 我有一个包含字符串的列表,例如
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", "b_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", "b_foo"]
my_dict = {"key_foo": ["a_bar"], "another_foo": ["c_bar", "False"]}
for (key, value) in my_dict.items():
if 'False' not in value:
my_list.extend([key, value])
当您在多行中执行此操作时,现在您的原始代码无法运行的原因就更清楚了。因为之前的代码是将每个键值对作为一个元素进行追加,而我们想要实现的是将键和值作为两个单独的元素进行追加。将 extend
方法移动到内部循环可防止将键值对用作一个元素。
编辑:
这是通过“扁平化”数组来实现列表理解的方法
my_list = ["a_foo", "b_foo"]
my_dict = {"key_foo": ["a_bar"], "another_foo": ["c_bar", "False"]}
my_list.extend([i for pair in my_dict.items() for i in pair if "False" not in pair[1]])
您已接近列表推导式的结果。一旦过滤了不包含 'False'
的值,您只需遍历元组 (key, values)
,即 return key
然后 values
:
>>> my_list = ["a_foo", "b_foo"]
>>> my_dict = {"key_foo": ["a_bar"], "another_foo": ["c_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']]