引用元组内的数字

时间:2013-11-19 16:22:02

标签: python-3.x types

我想使用数字按降序排列类似于下一个元组的元组列表:

  

data = [('ralph picked',['nose','4','apple','30','winner','3']),   ('aaron popped',['soda','1','爆米花','6','丸','4',   '问题','29'])]

我想对嵌套列表进行排序,以便结果看起来像:

data2 = [('ralph picked', ['apple', '30', 'nose', '4', 'winner', '3']), 
('aaron popped', ['question', '29', 'popcorn', '6', 'pill', '4', 'soda', '1'])]

我正在尝试使用此代码:

data2=[]
for k, v in data:
    data2 = ((k,   sorted(zip(data[::2], data[1::2]), key=lambda x: int(x[1]), reverse=True)  ))
    [value for pair in data2 for value in pair]
print(data2)

但我不断收到错误消息:

TypeError: int() argument must be a string or a number, not 'tuple'

我试图将int中的key=lambda x: int(x[1])重新排列为不同的东西,但我不断得到相同的消息,我对python很新,语法经常让我感觉到。关于如何解决这个问题的任何想法?我真的非常感谢你!

1 个答案:

答案 0 :(得分:2)

不要试图一次性完成所有事情,而是让我们给出名字:

data = [('ralph picked', ['nose', '4', 'apple', '30', 'winner', '3']),
        ('aaron popped', ['soda', '1', 'popcorn', '6', 'pill', '4', 'question', '29'])]

data2 = []
for k, v in data:
    new_list = sorted(zip(v[::2], v[1::2]), key=lambda x: int(x[1]), reverse=True)
    flattened = [value for pair in new_list for value in pair]
    new_tuple = (k, flattened)
    data2.append(new_tuple)

产生

>>> print(data2)
[('ralph picked', ['apple', '30', 'nose', '4', 'winner', '3']), 
 ('aaron popped', ['question', '29', 'popcorn', '6', 'pill', '4', 'soda', '1'])]

您需要区分datav - 您只想对v进行排序,并且您需要存储列表推导的结果,否则您只需要构建把它扔掉。

当你遇到语法问题时,将所有内容分成几部分并print查看发生了什么。例如,您可以将new_list分解为

words = v[::2]
numbers = v[1::2]
pairs = zip(words, numbers)
sorted_pairs = sorted(pairs, key=lambda x: int(x[1]), reverse=True)

sorted_pairs确实是new_list

相关问题