python 2.7 2D字典

时间:2018-01-29 17:12:01

标签: python dictionary

Dict = {}
target = [
    ['55.0', 'Index', '0', '18512'],
    ['55.0', 'Index', '0', '18513']]
for input in target:

    temperature, hum, out = input[0], input[1], input[2:]
    Dict.setdefault(temperature, {}).setdefault(hum, out)
print Dict

我认为结果是 {'55.0': {'Index': ['0', '18512']}}, {'55.0': {'Index': ['0', '18513']}}

但实际结果仅为{'55.0': {'Index': ['0', '18512']}}

我该如何解决?

2 个答案:

答案 0 :(得分:2)

您要求的是字典列表:

list_of_dicts = []
target = [
    ['55.0', 'Index', '0', '18512'],
    ['55.0', 'Index', '0', '18513']]
for input in target:
    temperature, hum, out = input[0], input[1], input[2:]
    list_of_dicts.append({temperature: {hum: out}})
print list_of_dicts

<强>输出

[{'55.0': {'Index': ['0', '18512']}}, {'55.0': {'Index': ['0','18513']}}]

如果你想拥有一个带有嵌套字典'55.0'的{​​{1}}个密钥的字典,这是不可能的,因为字典可以有unqiue键,所以你的第二个项目将始终覆盖第一个

还有一些注意事项:

1。)如果密钥不存在,'hum: out'非常适合默认密钥的项目值,但在您的用例中,由于您的密钥不是唯一的,因此它会产生反效果,因此值将得到每次都被覆盖。在这种特殊情况下,只需为每个项目创建一个字典,setdefault()生成的append()就足够了。

2.)尽量避免使用listinput等保留关键字。虽然你已经大写dict,但很容易引入一些错误,比如覆盖一些内置功能。建议的Python命名约定是对变量/属性使用小写和下划线,对类使用CapitalizedWords。 Read more about it on the documentation here。这只是一个建议,你可以拥有自己的风格。但是通过遵循一致的约定,您的代码将更易于调试。

答案 1 :(得分:0)

from collections import defaultdict
target = [
    ['55.0', 'Index', '0', '18512'],
    ['55.0', 'Index', '0', '18513']]
main_dict = []
for tar in target:
    key, index, list_ = tar[0], tar[1], tar[2:]
    local_dict = defaultdict(dict)
    local_dict[key].update({index:list_})
    main_dict.append(dict(local_dict))
print(main_dict)
>>>[{'55.0': {'Index': ['0', '18512']}}, {'55.0': {'Index': ['0', '18513']}}]