【问题标题】:Pythonic way of getting a list of IDs from a dictionary [duplicate]从字典中获取ID列表的Pythonic方法[重复]
【发布时间】:2019-05-03 19:06:48
【问题描述】:

假设我有以下数据结构

theValues = [
  { "id": "123", "name": "foo" },
  { "id": "321", "name": "bar" },
  { "id": "231", "name": "baz" }
]

获取 ID [123,321,231] 列表的最佳 Pythonistic 方式是什么?

如果这是 javascript,我可能会使用匿名函数对列表中的每个元素使用过滤器,但我似乎找不到 Python 等效项。我知道我可以做到以下几点:

myList = []
for v in theValues: myList.append(v["id"])

最终,我想将字典列表缩减为一个逗号分隔的列表,我想我可以通过连接来实现...尽管这种语法对我来说仍然很奇怪。有没有更好的办法?

myListIds = ",".join( myList )

这是最常见的做法吗?在 PHP 中,我可以这样做:

$myListIds = implode(",", array_map( values, function( v ) { return v["ID"]; } ));

【问题讨论】:

  • [d["id"] for d in values] 怎么样?此外,变量名称values 隐藏了 dict 方法的名称。
  • @YakymPirozhenko 谢谢...为清楚起见,我将更改该变量名称。这是样本数据,所以我没想到。

标签: python arrays python-3.x dictionary array-map


【解决方案1】:
values = [
  { "id": "123", "name": "foo" },
  { "id": "321", "name": "bar" },
  { "id": "231", "name": "baz" }
]
ids = [val['id'] for val in values]
print(ids)

基于此answer

【讨论】:

  • 我对它的工作原理很感兴趣。我将在 lambda 函数上查找此内容以及更多内容。谢谢。
  • 感谢您的回答。它让我走上了列表推导的道路,它们太棒了。
【解决方案2】:

还有一种方法可以使用 Python 进行映射,请参见下面的示例。

values = [
  { "id": "123", "name": "foo" },
  { "id": "321", "name": "bar" },
  { "id": "231", "name": "baz" }
]

my_list = map(lambda x: x["id"], values)

print(my_list)

输出:

['123', '321', '231']

关于逗号分隔的列表,如果你想要一个字符串,你可以使用join来获取它:

print(", ".join(my_list))

如果你想在一行代码中完成,你应该这样做:

print(", ".join(map(lambda x: x["id"], values)))

输出:

123, 321, 231

【讨论】:

  • 那么我也可以使用",".join( list(map(lambda x: x["id"], values)) ) 加入还是太丑陋了?
  • 对我来说似乎很简单且易于阅读。
  • 谢谢。看起来这两个答案都是从相似但不同的路径来解决这个问题的。需要对此进行更多研究。 ^_^
  • 你可能不需要投射list()", ".join(map(lambda x: x["id"], values)) 应该没问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2020-04-18
  • 2022-06-23
  • 2019-10-04
相关资源
最近更新 更多