【问题标题】:List/Tuples to Dictionaries. How to stack data instead substitute them? [duplicate]列表/元组到字典。如何堆叠数据而不是替换它们? [复制]
【发布时间】:2016-05-18 11:04:21
【问题描述】:

我有如下源数据:

   source= [['data1', 'foo'],   
      ['data2', 'bar'],
      ['data3', 'ddd1'],
      ['data2', 'ddd2'],
      ['data2', 'new'],
      ['data1', 'data']]

我当然可以dict(key,value) for key,value in source,但这会给我data1: datadata2: newdata3: ddd1。虽然我正在寻找的是:data1: [ 'foo', 'data' ]data2: ['bar', 'ddd2']data3: [ 'ddd1' ],但有什么方法可以做到这一点吗?

【问题讨论】:

  • 我很好奇为什么是-1。
  • 当您将鼠标悬停在否决按钮上时,它会显示This question does not show any research effort; it is unclear or not useful。我相信分号之前的部分很合适。我只是快速搜索了一下。我的第一个查询是python list to dictionary appending to already-used keys。第二个结果有答案。然而,它并不是唯一的。 Martijn 找到的那个是另外一个。
  • 您好 Zondo,谢谢您的回复,很遗憾我没有使用这些词。我用了stack之类的词。我的错。但是,是的,在发帖之前,我已经研究了一个解决方案(在某个时候)。很抱歉。

标签: python list dictionary data-structures tuples


【解决方案1】:

您正在寻找defaultdict 类:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> source= [['data1', 'foo'],   
...       ['data2', 'bar'],
...       ['data3', 'ddd1'],
...       ['data2', 'ddd2'],
...       ['data2', 'new'],
...       ['data1', 'data']]
...
>>> for k,v in source:
...     d[k].append(v)
...
>>> d
defaultdict(<class 'list'>, {'data1': ['foo', 'data'], 'data2': ['bar', 'ddd2', 'new'], 'data3': ['ddd1']})

【讨论】:

    猜你喜欢
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多