-6

编辑:

我想创建一个字典,其中第一个数字是键,旁边的数字是该键的值的数量。所以第一行有一个 1 和一个 2,这意味着键 1 有 2 个值,这些值在下一行。第三行有一个 2 和 3,这意味着键 2 有 3 个值,这些值是 4,3,1。

第五行有一个 3 和一个 4,这意味着键 3 有 4 个值,这 4 个值是 5、4、2、1。

我想知道如何制作可以像这样创建字典的字典:

{1:[2,3],2:[4,3,1],3:[5,4,2,1]...}

1 2
2 3
2 3
4 3 1
3 4
5 4 2 1
4 4
8 3 5 2
5 7
15 11 8 9 6 3 4
6 2
9 5
7 3
14 13 8
8 5
12 11 5 4 7
9 6
26 22 15 10 6 5
10 3
20 17 9
11 4
16 12 5 8
12 5
16 14 13 11 8
4

1 回答 1

1

如果你能更好地描述你的问题,你可以直接把它翻译成 Python。

您想要成对的行,将每行拆分为单独的数字,并将第一行中的第一个数字映射到第二行中的数字列表。

所以,让我们从配对线开始。(这是唯一棘手的问题——但是关于 SO 有大约 3000 个问题,向您展示了两种简单的方法。)

pairs = zip(*[iter(lines)]*2)

现在,对于每一对:

for first, second in pairs:

... 将每一行分成单独的数字:

    first_numbers = map(int, first.split())
    second_numbers = map(int, second.split())

...并将第一行中的第一个数字映射到第二行中的数字列表:

    d[first_numbers[0]] = second_numbers

>>> lines = '''1 2
... 2 3
... 2 3
... 4 3 1'''.splitlines()
>>> d = {}
>>> pairs = zip(*[iter(lines)]*2)
>>> for first, second in pairs:
...     first_numbers = map(int, first.split())
...     second_numbers = map(int, second.split())
...     d[first_numbers[0]] = second_numbers
>>> d
{1: [2, 3], 2: [4, 3, 1]}

如果您想使用第一行中的第二个数字来验证长度,您可以添加以下内容:

...         if first_numbers[1] != len(second_numbers):
...             raise ValueError('Expected {}, got {}'.format(
...                 first_numbers[1], len(second_numbers)))
于 2013-10-17T21:27:16.243 回答