动态加入字典

时间:2014-06-12 13:19:40

标签: python dictionary

a="90342"

# this used to generate a dict of each char in a and it indexs
modchar=[{i:a.index(i)} for i in a ]

#modchar=[{'9': 0}, {'0': 1}, {'3': 2}, {'4': 3}, {'2': 4}]


# below produce combination now this combination
def combination(x,n):
   return list(itertools.combinations(x,n))

combination(modchar,1)

#output [({'9': 0},), ({'0': 1},), ({'3': 2},), ({'4': 3},), ({'2': 4},)]

combination(modchar,2)

#output [({'9': 0}, {'0': 1}), ({'9': 0}, {'3': 2}), ({'9': 0}, {'4': 3}), ({'9': 0}, {'2': 4}), ({'0': 1}, {'3': 2}), ({'0': 1}, {'4': 3}), ({'0': 1}, {'2': 4}), ({'3': 2}, {'4': 3}), ({'3': 2}, {'2': 4}), ({'4': 3}, {'2': 4})]

combination(modchar,3)
#output [({'9': 0}, {'0': 1}, {'3': 2}), ({'9': 0}, {'0': 1}, {'4': 3}), ({'9': 0}, {'0': 1}, {'2': 4}), ({'9': 0}, {'3': 2}, {'4': 3}),....]

如果你查看列表中的每个结果,第一个元素是dict的元组。我想要做的是将元组内的字典组合起来并将其作为单个字典

我试过了

map(lambda x:dict(x[0],**x[1]),list(itertools.combinations(x,n))) 
上面的

仅适用于两个元组的元组。

如何动态生成代码它应该结合所有dicts并生成n

combination(x,n)值不明显的单个词典

预期输出:对于n = 2

[({'9': 0,'0': 1}) ....]

预期输出:n = 3

[({'9': 0,'0': 1,'3': 2})..]

2 个答案:

答案 0 :(得分:1)

这是一种方法:

combos = combinations(modchar,3)

def combineDictTuple(dt):
    d = {}
    for item in dt:
        d.update(item)
    return d

newCombos = [combineDictTuple(dt) for dt in combos]

# OUTPUT:  [{'9': 0, '0': 1, '3': 2}, {'9': 0, '0': 1, '4': 3}, {'9': 0, '0': 1, '2': 4}, {'9': 0, '3': 2, '4': 3}, {'9': 0, '3': 2, '2': 4}, {'9': 0, '2': 4, '4': 3}, {'0': 1, '3': 2, '4': 3}, {'0': 1, '3': 2, '2': 4}, {'0': 1, '2': 4, '4': 3}, {'3': 2, '2': 4, '4': 3}]

答案 1 :(得分:0)

这应该做你想要的:

>>> def update_with_return(d1, d2):
...   d1.update(d2)
...   return d1
... 
>>> reduce(update_with_return, ({'a': 1}, {'b':2}), dict())
{'a': 1, 'b': 2}