【问题标题】:Nested Dicts in Python keys and valuesPython 键和值中的嵌套字典
【发布时间】:2018-12-03 10:28:22
【问题描述】:

我得到了一个看起来像这样的字典:

d {
  1: {
    a: 'aaa',
    b: 'bbb',
    c: 'ccc'
  }
  2: {
    d: 'dddd',
    a: 'abc',
    c: 'cca'
  }
  3: {
    e: 'eee',
    a: 'ababa',
    b: 'bebebe'
  }
}

我想像这样通过dict转换

d {
  a: 1,2,3
  b: 1,3
  c: 1,2
  d: 2
  e: 3
}

我怎样才能做到这一点?我尝试反转它,但它会抛出不可散列的字典。

【问题讨论】:

  • 根据什么规则变换?
  • 你能发布你的解决方案吗?这样我们就可以解释你做错了什么

标签: python python-3.x dictionary


【解决方案1】:
a = {
    1: {
        "a": "aaa",
        "b": "bbb",
        "c": "ccc"
    },

    2: {
        "d": "ddd",
        "a": "abc",
        "c": "cca"
    },

    3: {
        "e": "eee",
        "a": "ababa",
        "b": "bebebe"
    }
}

from collections import defaultdict
b = defaultdict(list)
for i, v in a.items():
    for j in v:
        b[j].append(i)

b 的结果是:

defaultdict(<class 'list'>, {'a': [1, 2, 3], 'b': [1, 3], 'c': [1, 2], 'd': [2], 'e': [3]})

【讨论】:

    【解决方案2】:

    你只需要弄清楚它的逻辑。遍历主字典,并使用子字典的键来构建你的新字典。

    d =  {
      1: {
        'a': 'aaa',
        'b': 'bbb',
        'c': 'ccc'
      },
      2: {
        'd': 'dddd',
        'a': 'abc',
        'c': 'cca'
      },
      3: {
        'e': 'eee',
        'a': 'ababa',
        'b': 'bebebe'
      }
    }
    
    newdict = {}
    for k,v in d.items():
        for keys in v:
            newdict.setdefault(keys,[]).append(k)
    
    print(newdict)
    

    【讨论】:

      猜你喜欢
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 2018-07-10
      • 2016-11-14
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多