0

What's the Pythonic way to convert this list of tuples to a simpler list of tuples?

import urllib.parse
QS='field=var1&save=stringA&field=var2&save=&field=var3&save=stringC'
urllib.parse.parse_qsl(QS, keep_blank_values=True)
>>> [('field', 'var1'), ('save', 'stringA'), ('field', 'var2'), ('save', ''), ('field', 'var3'), ('save', 'stringC')]

Python magic occurs here

>>> [('var1', 'stringA'), ('var2', ''), ('var3', 'stringC')]
jamylak
  • 128,818
  • 30
  • 231
  • 230
Gnarlodious
  • 304
  • 2
  • 4
  • 16

1 Answers1

1
>>> data = [('field', 'var1'), ('save', 'stringA'), ('field', 'var2'), ('save', ''), ('field', 'var3'), ('save', 'stringC')]
>>> [(field[1], save[1]) for field, save in zip(*[iter(data)]*2)]
[('var1', 'stringA'), ('var2', ''), ('var3', 'stringC')]

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

Another way:

>>> items = (x[1] for x in data)
>>> list(zip(*[items]*2))
[('var1', 'stringA'), ('var2', ''), ('var3', 'stringC')]
Community
  • 1
  • 1
jamylak
  • 128,818
  • 30
  • 231
  • 230