在嵌套字典中添加列表元素 - python

时间:2014-07-31 20:32:37

标签: python list dictionary nested elements

我有嵌套的词典,下面是我到目前为止的代码输出,这正是我需要和想要它们的方式。我试图添加第二个字典组ID列表的列表元素;一起获取与第一个字典相关的每个元素发生的总发生次数;这是一个具体的日期

{'2014-06-14': {'205089113': [0, 1, 0, False, True], '268243219': [0, 1, 0, False, True], '216535211': [0, 0, 0, False, True], '207385741': [0, 0, 0, False, True], '207018490': [0, 0, 0, False, True], '204059430': [0, 0, 0, False, True], '209169283': [0, 1, 0, False, True], '232067397': [0, 0, 0, False, True], '204718647': [0, 1, 0, False, True], '205438195': [0, 1, 0, False, True]}, '2014-06-20': {'209989276': [1, 0, 0, False, True], '209840693': [1, 0, 0, False, True], '207067397': [1, 0, 0, False, True], '207919002': [1, 0, 0, False, True], '204718498': [2, 1, 0, False, True], '204437024': [1, 0, 0, False, True], '219878931': [1, 0, 0, False, True]},

我的意思是一个例子 '2014-06-14':[0,5,0,0,10],'2014-06-20': [8,1,0,0,7]}

每次我尝试len()甚至计数器模块时都会出现一个关键错误

下面的代码给出了第二个字典的出现次数,但似乎无法破解编码将其列表元素加在一起,不确定是否存在我不理解的直接方式或者它是否是甚至可能

for date in dates.keys(): print date, len(dates[date].keys())

试图指向正确的方向

2 个答案:

答案 0 :(得分:1)

如果您将子词典转换为Pandas数据帧,则可以轻松完成:

import pandas as pd

d = {'2014-06-14': {'205089113': [0, 1, 0, False, True], 
                    '268243219': [0, 1, 0, False, True], 
                    '216535211': [0, 0, 0, False, True], 
                    '207385741': [0, 0, 0, False, True], 
                    '207018490': [0, 0, 0, False, True], 
                    '204059430': [0, 0, 0, False, True], 
                    '209169283': [0, 1, 0, False, True], 
                    '232067397': [0, 0, 0, False, True], 
                    '204718647': [0, 1, 0, False, True], 
                    '205438195': [0, 1, 0, False, True]}, 
     '2014-06-20': {'209989276': [1, 0, 0, False, True], 
                    '209840693': [1, 0, 0, False, True], 
                    '207067397': [1, 0, 0, False, True], 
                    '207919002': [1, 0, 0, False, True], 
                    '204718498': [2, 1, 0, False, True], 
                    '204437024': [1, 0, 0, False, True], 
                    '219878931': [1, 0, 0, False, True]}}

new_d = {}
for k in d.iterkeys():
    new_d[k] = pd.DataFrame.from_dict(d[k], orient="index")

然后:

out = {}
for k in new_d:
    out[k] = new_d[k].sum().tolist()

print out
{'2014-06-14': [0.0, 5.0, 0.0, 0.0, 10.0], '2014-06-20': [8.0, 1.0, 0.0, 0.0, 7.0]}

拥有Pandas数据帧将允许您轻松应用其他功能。

希望这有帮助。

答案 1 :(得分:0)

我假设您发布的输出错误,预期输出等于{'2014-06-14':[0,5,0,0,10],'2014-06-20': [8,1,0,0,7]}。以下内容符合您的需求:

d = {'2014-06-14': {'205089113': [0, 1, 0, False, True],
                    '268243219': [0, 1, 0, False, True],
                    '216535211': [0, 0, 0, False, True],
                    '207385741': [0, 0, 0, False, True],
                    '207018490': [0, 0, 0, False, True],
                    '204059430': [0, 0, 0, False, True],
                    '209169283': [0, 1, 0, False, True],
                    '232067397': [0, 0, 0, False, True],
                    '204718647': [0, 1, 0, False, True],
                    '205438195': [0, 1, 0, False, True]},
     '2014-06-20': {'209989276': [1, 0, 0, False, True],
                    '209840693': [1, 0, 0, False, True],
                    '207067397': [1, 0, 0, False, True],
                    '207919002': [1, 0, 0, False, True],
                    '204718498': [2, 1, 0, False, True],
                    '204437024': [1, 0, 0, False, True],
                    '219878931': [1, 0, 0, False, True]}}

result = {}
for key in d:
    values = zip(*d[key].values())
    result[key] = [sum(value_tuple) for value_tuple in values]
print result