【问题标题】:Append dict items to a list with a single line for loop使用单行 for 循环将 dict 项附加到列表中
【发布时间】:2018-04-06 00:41:23
【问题描述】:

我有一个清单

lst = []

我有字典条目

a= {'a':1,'b':2}

我希望以一种可理解的方式编写一个 for 循环来填充列表。 我试过的是

lst.append(k,v) for (k,v) in a.items()

然后我需要将字典更新为

a = {'c':3, 'd':4}

然后再次更新列表lst

将元组添加为[('a',1)('b',2)('c',3)('d',4)] 遍历 dict 并填充列表的正确方法是什么?

【问题讨论】:

  • 你想用什么来填写列表? keysvalues 或两者兼而有之?
  • 两者。就像在这个例子中一样 lst = [('a',1)('b',2)]
  • 追加只需要一个参数
  • 试试lst = a.items()
  • @ZdaR 看到更新的答案,这是你想要做的吗?

标签: python list dictionary for-loop dictionary-comprehension


【解决方案1】:

这是列表推导的语法,应该可以满足您的需求:

lst = [(k,v) for k,v in a.items()]

一般list comprehension 是这样工作的:

someList = [doSomething(x) for x in somethingYouCanIterate]

输出

>>> lst
[('a', 1), ('b', 2)]

P.S.除了提出的问题之外,您还可以通过简单地调用来获得您想要做的事情而无需列表理解:

lst = a.items()

这将再次为您提供(key, value) 字典项对的元组列表。

编辑

更新问题后,由于您正在更新字典并希望列表中的键值对,您应该这样做:

a= {'a':1,'b':2}
oldA = a.copy()
#after performing some operation
a = {'c':3, 'd':4}
oldA.update(a)
# when all your updates on a is done
lst = oldA.items() #or [(k,v) for k,v in oldA.items()]
# or instead of updating a and maintaining a copy
# you can simply update it like : a.update({'c':3, 'd':4}) instead of a = {'c':3, 'd':4}

【讨论】:

  • 谢谢阿希什。这给了我dict_items([('a', 1), ('b', 2), ('c', 3), ('d', 4)])。如果我需要将其转换为元组列表。程序是什么?
  • 只需使用list()
【解决方案2】:

一种方法是:

a = {"a" : 1, "b" : 2}

lst = [(k, a[k]) for k in a]

a = {"c" : 3, "d" : 4}

lst += [(k, a[k]) for k in a]

lst 的内容是[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

或者,使用dict 类的.items() 函数来完成同样的事情:

a = {"a" : 1, "b" : 2}

lst = [b for b in a.items()]

a = {"c" : 3, "d" : 4}

lst += [b for b in a.items()]

【讨论】:

  • 使用 a.items() 而不是遍历键。 items() 会给你一个元组。
  • @FujiClado 不错!我刚刚编辑了答案以将其合并。
【解决方案3】:

有许多有效的方法可以实现这一点。最简单的路线是使用

a = {"a" : 1, "b" : 2}
lst = list(a.items())

替代方法包括使用zip 函数、列表理解等。

【讨论】:

  • 为什么要使用 zip()?它可以使用 a.items() 来完成,它更具可读性。
  • zip 旨在展示替代方法。但是,您是正确的,因为这会降低可读性,因此我相应地更新了答案,同时仍然提到了 zip 函数。
猜你喜欢
  • 1970-01-01
  • 2018-01-09
  • 2020-09-25
  • 2023-01-07
  • 2020-03-29
  • 2015-04-27
  • 2020-07-30
  • 1970-01-01
  • 2021-01-16
相关资源
最近更新 更多