【问题标题】:python: switching dictionary key structurepython:切换字典键结构
【发布时间】:2017-09-13 08:49:23
【问题描述】:

我有一本字典:

d = {'a1':{'b1':1, 'b2':2}, 'a2':{'b1':3, 'b2':4}}`.

我想切换字典的ab 键。换句话说,我希望得到的字典是:

dd = {'b1':{'a1':1, 'a2':3}, 'b2':{'a1':2, 'a2':4}}

不使用循环。

这是我现在使用的循环:

d = {'a1':{'b1':1, 'b2':2}, 'a2':{'b1':3, 'b2':4}}
from collections import defaultdict
dd=defaultdict(dict)

for k in d.keys():
   for tmp_k in d.get(k).keys():
      dd[tmp_k][k] =d[k][tmp_k]
print dict(dd)

这个可以做成一行吗?

【问题讨论】:

  • 你的问题是什么?您尝试过任何解决方案吗?
  • 你有这个工作 with 循环吗?对于一般情况来说,这并不是那么简单,我认为它作为单行 tbh 可能难以理解。
  • d["a1"]d["a2"] 字典的键总是相同的吗?或者它们可以不同吗?
  • 是的,它们总是一样的

标签: python python-2.7 itertools dictionary-comprehension


【解决方案1】:

我假设without for loops 你的意思是理解。这是一种可能性:

代码:

这可以压缩成一行,但我认为两行会更清晰一些,而且性能可能不会差很多。

import itertools as it

d = {'a1': {'b1': 1, 'b2': 2}, 'a2': {'b1': 3, 'b2': 4}}

new_keys = set(it.chain.from_iterable(i.keys() for i in d.values()))
new_dict = {k: {i: v[k] for i, v in d.items()} for k in new_keys}

print(new_dict)

结果:

{'b1': {'a1': 1, 'a2': 3}, 'b2': {'a1': 2, 'a2': 4}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2012-01-08
    • 2021-11-10
    相关资源
    最近更新 更多