0

I need to break the lines on the pair values and to convert it to a list or dictonary. Does anyone know of an easy way to do this in Python?

From this:

1
Petrov
2
Ivanov
3
Sidorov

to

["1", "Petrov"], ["2", "Ivanov"], ["3", "Sidorov"]

or dictonary:

{"1": "Petrov", "2": "Ivanov", "3": "Sidorov"}
John Smith
  • 29
  • 1

4 Answers4

3
>>> strs = """1                            
Petrov
2
Ivanov
3
Sidorov"""
>>> dict(zip(*[iter(strs.splitlines())]*2))
{'2': 'Ivanov', '3': 'Sidorov', '1': 'Petrov'}

Related: How does zip(*[iter(s)]*n) work in Python?

Community
  • 1
  • 1
Ashwini Chaudhary
  • 244,495
  • 58
  • 464
  • 504
0

This code will return you a dictionary:

inp = open("file")
d = dict()
k = list()
v = list()
for line in inp:
    if line.strip("\n").isdigit():
        k.append(line.strip("\n"))
    else:
        v.append(line.strip("\n"))
print dict(zip(k,v))
0

Adds a little twist to hcwhsa's solution by manipulating odd and even items in list:

>>> s = "1\nPetrov\n2\nIvanov\n3\nSidorov"
>>> dict(zip(s.split("\n")[::2], s.split("\n")[1::2]))
{'1': 'Petrov', '3': 'Sidorov', '2': 'Ivanov'}

see Shortest way to slice even/odd lines from a python array?

Community
  • 1
  • 1
alvas
  • 115,346
  • 109
  • 446
  • 738
0
>>> strs = """1                            
Petrov
2
Ivanov
3
Sidorov"""
>>> i = iter(strs.split())
>>> {item: i.next() for item in i}
{'1': 'Petrov', '3': 'Sidorov', '2': 'Ivanov'}

or

>>> i = iter(strs.split())
>>> [[item, i.next()] for item in i]
[['1', 'Petrov'], ['2', 'Ivanov'], ['3', 'Sidorov']]
dansalmo
  • 11,506
  • 5
  • 58
  • 53