【问题标题】:Problems while reformating a list of tuples, by taking only the first value of the tuple?通过仅采用元组的第一个值来重新格式化元组列表时出现问题?
【发布时间】:2017-05-02 20:51:51
【问题描述】:

我有以下元组列表:

>>>lis = df['vals'].values.tolist()
>>>lis
[[('apple', 'FRUIT'),
          ('$', 'SYM'),
          ('6.00', 'X'),
          ('bannana', 'FRUIT'),
          ('$', 'SYM'),
          ('4.00', 'X')]]

如何将其重新格式化为:

lis = [['apple: $ 6.00', 'bannana: $ 4.00']]

我尝试过:

list_comp = [item for sublist in lis for item in sublist]
list_comp = [' '.join(item) for t in list_comp for item in [t]]

但是我不明白如何放置: 和上述格式。

【问题讨论】:

  • [[apple: $ 6.00 bannana: $ 4.00]] 这不是 python 类型。什么/哪个部分是什么?细绳?数字?它们是列表中的不同值吗?是 1 个列表的 1 个列表的 1 个列表,它是一个字符串吗?
  • 检查问题中的第二个代码块。那里发生了什么?
  • 更新问题,因为它真的不清楚。
  • 您希望它是"apple: $ 6.00 bannana: $ 4.00"(一个字符串)还是['apple:', '$', '6.00', 'bannana:', '$', '4.00'](字符串列表)?为什么那里有两个列表? [ [ ] ] ?
  • 我想把它平成:[ ['apple: $ 6.00', 'bannana: $ 4.00']].@Dekel

标签: python python-3.x pandas data-structures list-comprehension


【解决方案1】:

您可以使用推导式并将 ": $ " 与元组元素连接起来:

print [lis[0][i][0] + ": $ " + lis[0][i+2][0] for i in range(0,len(lis[0]),3)]

【讨论】:

    【解决方案2】:

    首先,定义一个函数:

    >>> def format_tuple(fruit, sym, x):
    ...   return "{}: {} {}".format(fruit, sym, x)
    ... 
    

    那么,

    >>> my_list
    [[('apple', 'FRUIT'), ('$', 'SYM'), ('6.00', 'X'), ('bannana', 'FRUIT'), ('$', 'SYM'), ('4.00', 'X')]]
    >>> my_list = my_list[0]
    >>> by_three = (my_list[i:i + 3] for i in range(0,len(my_list), 3))
    >>> [format_tuple(*(c[0] for c in chunk)) for chunk in by_three]
    ['apple: $ 6.00', 'bannana: $ 4.00']
    

    而且,我想如果你真的希望它包含在一个列表中,最后一行可能是:

    >>> [[format_tuple(*(c[0] for c in chunk)) for chunk in by_three]]
    [['apple: $ 6.00', 'bannana: $ 4.00']]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      相关资源
      最近更新 更多