Python中字典包含字典列表

3 投票
2 回答
950 浏览
提问于 2025-04-18 18:07

我是一名用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中,遗憾的是,如果key1Hash中不存在,或者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({})

等等。

这就是你想要的吗?

撰写回答