Python中字典包含字典列表
我是一名用Perl写脚本的程序员,现在在用Python,想知道怎么把下面的Perl代码转换成Python。
$Hash{$key1}[$index_value]{$key2} = $value;
我在StackOverflow上看到过这个问题:Python中字典里的字典列表
不过我还是不太明白self.rules
是干嘛的,或者它是否适合我的解决方案。
我的数据会来自文件,我会用正则表达式把数据捕获到临时变量中,直到准备好存储到数据结构里。如果你需要问的话,和$index_value
相关的顺序很重要,我希望它能保持为整数。
任何建议都很受欢迎,或者如果你觉得我需要重新考虑在Python中使用的数据结构,那也会很有帮助。
2 个回答
1
Hash[key1][index_value][key2] = value
下面这段代码在Python中直接对应的是:
$Hash{$key1}[$index_value]{$key2} = $value;
而在Python中,遗憾的是,如果key1
在Hash
中不存在,或者index_value
超出了Hash[key1]
的范围,这段代码就无法正常工作。这两种情况都需要处理,你可以这样做:
lst1 = Hash.setdefault(key1, [])
if index_value >= len(lst1):
for _ in range(len(lst1), index_value+1):
lst1.append({})
lst1[index_value][key2] = value
1
你想让 h
成为一个字典(h
是因为 hash
是 Python 内置的):
h = {}
现在,h[key]
应该是一个列表(对于某个合适的 key
):
key = 'key'
L = h[key] = []
我把 L
设置为指向 h[key]
,这样接下来的解释会更简单。
现在,L
中的每个元素都是一个字典:
value1 = {'key2': 42, 'key3': 6*9}
L.append(value1)
value2 = {'key3': 'some other value'}
L.append(value2)
现在,你可以按照你想要的方式访问 h
:
h[key][0]['key2']
h[key][1]['key3']
你可以往列表里添加内容:
h[key].append({})
等等。
这就是你想要的吗?