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']}}
我该如何解决?
答案 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.)尽量避免使用list
或input
等保留关键字。虽然你已经大写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']}}]