Python2.7 2D词汇表
我想结果是Python2.7 2D词汇表,python,dictionary,Python,Dictionary,我想结果是 {'55.0':{'Index':['0','18512']},{'55.0':{'Index':['0','18513']} 但实际结果只是{'55.0':{'Index':['0','18512']} 如何修复它?您需要的是一个字典列表: Dict = {} target = [ ['55.0', 'Index', '0', '18512'], ['55.0', 'Index', '0', '18513']] for input in target: t
{'55.0':{'Index':['0','18512']},{'55.0':{'Index':['0','18513']}
但实际结果只是{'55.0':{'Index':['0','18512']}
如何修复它?您需要的是一个字典列表:
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'
键的字典'hum:out'
,这是不可能的,因为字典可以有unqiue键,因此您的第二项将始终覆盖第一项
还有几点注意: 1.
setdefault()
非常适合在密钥不存在的情况下默认密钥的项值,但在您的用例中,由于密钥不是唯一的,因此每次都会覆盖该值,因此会适得其反。在这种特殊情况下,只需为每个项目创建一个字典,并将append()
添加到生成的列表中即可
2.)尽量避免使用保留关键字,如input
或dict
。尽管您已经大写了Dict
,但很容易引入错误,比如覆盖一些内置功能。Python的建议命名约定是对变量/属性使用小写和下划线,对类使用大写DWORD。这只是一个建议,你可以有自己的风格。但是,通过遵循一组一致的约定,您的代码将更易于调试。您需要的是一个字典列表:
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'
键的字典'hum:out'
,这是不可能的,因为字典可以有unqiue键,因此您的第二项将始终覆盖第一项
还有几点注意: 1.
setdefault()
非常适合在密钥不存在的情况下默认密钥的项值,但在您的用例中,由于密钥不是唯一的,因此每次都会覆盖该值,因此会适得其反。在这种特殊情况下,只需为每个项目创建一个字典,并将append()
添加到生成的列表中即可
2.)尽量避免使用保留关键字,如input
或dict
。尽管您已经大写了Dict
,但很容易引入错误,比如覆盖一些内置功能。Python的建议命名约定是对变量/属性使用小写和下划线,对类使用大写DWORD。这只是一个建议,你可以有自己的风格。但是,通过遵循一组一致的约定,您的代码在调试时将更具可读性。尝试将第二个“55.0”更改为其他内容,我相信您在对象上设置了相同的键。否则,请尝试使用列表而不是对象,因为您似乎想要多个结果,而不是一次将第二个“55.0”更改为其他内容,我相信您在对象上设置了相同的键。否则,请尝试使用列表而不是对象,因为您似乎想要多个结果,而不是单个结果
[{'55.0': {'Index': ['0', '18512']}}, {'55.0': {'Index': ['0','18513']}}]