编辑:
我想创建一个字典,其中第一个数字是键,其旁边的数字是该键的值的数量。所以第一行有一个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
答案 0 :(得分: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)))