【问题标题】:How do I parse a default dict with values that are lists into independent dicts如何将默认字典与列表中的值解析为独立字典
【发布时间】:2019-08-20 03:43:30
【问题描述】:

试图解析一个defaultdict(list)

输入:

defaultdict(class <'list'>,{'key1': ['v1', 'v2'], 'key2': [v3, v4], 'key3': ['v5', 'v6']})

想要的输出:

list_dic = [{key1: v1, key2: v3, key3: v5}, {key1: v2, key2: v4, key3: v6}] 

必须为列表中的 n 个值工作。

根据所需的输出,我打算使用 mysql executemany 将这些值插入到数据库中。如果有人对我如何将默认字典(列表)插入 mysql 中的表有任何更好的建议 - 我将不胜感激。

【问题讨论】:

  • 对不起,这是我的第一篇文章——我已经习惯了礼仪

标签: python-3.x dictionary data-structures mapping defaultdict


【解决方案1】:

对我来说,答案在于嵌套在列表理解中的 dic 理解。 请注意,这段代码依赖于输入,特别是一个字典,所有列表的长度都相同!

要测试它,请运行:

n = len(list(input.values())[0]
all_length_equal = all([len(v)==n for v in input.values()])

完成后,下面的代码会遍历每个值,获取 i-value ,并将 store 放入字典中,尝试使用 0 :

{k:v[0] for k,v in input.items()}

然后你需要添加一个列表推导

[ i for for i in range(len(list(input.values())[0])]

上面将返回一个数字范围。 但是如果将两者结合起来,它将返回 i 在第一个值的长度范围内的字典。

list_dic = [{
     k:v[i] for k,v in input.items() #This create the correct dictionnary with all the i-values in the input
} for i in range(len(list(input.values())[0])] # iterate through the length of the first list

【讨论】:

  • returns IndexError: list index out of range,能否请您深入了解
  • 这应该意味着你有一个长度不一样的列表:/
  • 我明白了,我原来的 dict 有一个值条目是 len 4,但其余的是 len 2。所以我运行了 del dict[key],因为它没有必要,然后运行你的代码并且它工作- 感谢您的耐心等待!
猜你喜欢
  • 2018-02-11
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 2011-06-21
  • 2014-10-07
相关资源
最近更新 更多