在python中转换元组

时间:2018-08-08 13:32:26

标签: python python-3.x tuples transform

(1,
 ['Fast Food',
  'Bakery',
  'Beverages',
  'Burgers',
  'Seafood',
  'Steaks',
  'Tea & Coffee',
  'Dessert',
  'Snacks'],
 'Islamabad',
 'Pakistan',
 ['1', '34'])

我有一个这样的元组,我想这样变换它,需要帮助:

(1,
 ['Fast Food',
  'Bakery',
  'Beverages',
  'Burgers',
  'Seafood',
  'Steaks',
  'Tea & Coffee',
  'Dessert',
  'Snacks',
 'Islamabad',
 'Pakistan',
 '1', '34'])

我想要一个列表和一个元组的键,例如(1,[...]),(2,[...])。

2 个答案:

答案 0 :(得分:3)

您可以解开元组,将列表与自由值合并,然后输出新的元组:

[(key, list1+strings+list2) for key, list1, *strings, list2 in list_of_tuples]

这利用Extended Iterable Unpacking的优势将免费字符串放入列表中。

答案 1 :(得分:3)

查看生成原始列表的内容可能会有所帮助,因此我可以查看更多案例。但是,我认为只要键位于第一个元组位置,这对您就可能有用。

y = (x[0], [i for sublist in x[1:] for i in sublist if isinstance(sublist, list)])

其中x是您的原始元组。这就是说:创建一个元组,第一个元素是原始文档的第一个元素。第二个元素是其余元素的扁平化版本。更多信息可能对帮助您解决此问题非常有帮助。我想做一个简单的类可能是一种更简洁的表示和处理这些数据的方法。

>>> x = (1,
...  ['Fast Food',
...   'Bakery',
...   'Beverages',
...   'Burgers',
...   'Seafood',
...   'Steaks',
...   'Tea & Coffee',
...   'Dessert',
...   'Snacks'],
...  'Islamabad',
...  'Pakistan',
...  ['1', '34'])
>>> y = (x[0], [i for sublist in x[1:] for i in sublist if isinstance(sublist, list)])
>>> y
(1, ['Fast Food', 'Bakery', 'Beverages', 'Burgers', 'Seafood', 'Steaks', 'Tea & Coffee', 'Dessert', 'Snacks', '1', '34'])