Python在dict中翻译列表/ dicts

时间:2016-10-29 00:11:02

标签: python list dictionary

  

对不起,我真的不知道要把标题放到什么位置,我希望这个例子足够

案例1 - 列表

我有一个这种格式的对象:

{
    'key[0]': 'value 0',
    'key[1]': 'value 1',
    'key[2]': 'value 2'
}

我希望得到一个像这样的对象:

{
    'key': [
        'value 0',
        'value 1',
        'value 2'
    ]
}

案例2 - dict

我能收到的另一个对象是这样的:

{
    'key[subkey0]': 'value 0',
    'key[subkey1]': 'value 1',
    'key[subkey2]': 'value 2'
}

我想得到:

{
    'key': {
        'subkey0': 'value 0',
        'subkey1': 'value 1',
        'subkey2': 'value 2'
    }
}

我的问题是,有没有这样做的lib?如果没有,那么最有效/最优化的方法是什么?

  

您可以认为,在第一种情况下,我收到的列表将始终完整,这意味着不会跳过任何号码

2 个答案:

答案 0 :(得分:0)

这是一个开始:

db.products.find({name: "4-Year Protection Plan - Geek Squad"}, {name: 1, sku: 1}).limit(10)

输出:

from collections import defaultdict
import re
import pprint

def convert(d):
    result = defaultdict(dict)
    for key, value in d.items():
        main, sub = re.match(r'(\w+)\[(\w+)\]', key).groups()
        result[main][sub] = value

    result = dict(result)  # just for display really
    pprint.pprint(result)

convert({
    'key1[subkey0]': 'value 0',
    'key1[subkey1]': 'value 1',
    'key2[subkey0]': 'value 2',
    'key2[subkey1]': 'value 3',
})

答案 1 :(得分:0)

对于第一种情况,

old = {
    'key[0]': 'value 0',
    'key[1]': 'value 1',
    'key[2]': 'value 2'
}
new = dict()
the_key = old.keys()[0].split("[")[0]
new[the_key] = list()
for key in old:
    new[the_key].append(old[key])

print new

通过[拆分旧字典键之一以获取真实密钥。然后使用此键构造新的dict。它让我觉得这是一种不好的做法,但它确实有效。所以你可以看一下。