按元组中的某个元素对元组列表进行排序

时间:2016-12-29 22:34:48

标签: python python-2.7 python-3.x tuples sortedlist

def insert(key, value, D, hasher = hash):

    x = hash(key)
    key_value = (x, key, value)
    D.append(key_value)
    sorted(D, key = lambda x:x[0])
    return D

insert("swag", 100, D, hash)

insert("swg", 150, D, hash)

print(D)

这似乎永远不会被排序,

我想通过x值

对列表进行排序

2 个答案:

答案 0 :(得分:4)

您正在对列表进行排序,并立即抛出已排序的列表。请注意,sorted会返回一个新列表,因此您还需要将已排序的列表重新分配到名称D

...
return sorted(D, key=lambda x:x[0])

要就地排序,请使用列表中的排序方法:D.sort

def insert(key, value, D, hasher = hash):
    ...
    D.sort(key=lambda x:x[0])

答案 1 :(得分:1)

您混淆了排序排序排序是一个单独保留原始可迭代的函数,但返回已排序的项目。你没有保存那个值。试试这个:

return sorted(D, key = lambda x:x[0])

示例

def insert(key, value, D, hasher = hash):

    x = hash(key)
    key_value = (x, key, value)
    D.append(key_value)
    print D
    D.sort()
    return D


D = []
insert("swag", 100, D, hash)
insert("swg",  150, D, hash)
insert("loot", 200, D, hash)
insert("crud",  50, D, hash)

print(D)

输出:

[(-1840385907632881630, 'swag', 100)]
[(-1840385907632881630, 'swag', 100), (-369175422006790866, 'swg', 150)]
[(-1840385907632881630, 'swag', 100), (-369175422006790866, 'swg', 150), (5971043325587305850, 'loot', 200)]
[(-1840385907632881630, 'swag', 100), (-369175422006790866, 'swg', 150), (5971043325587305850, 'loot', 200), (5473401298224946764, 'crud', 50)]
[(-1840385907632881630, 'swag', 100), (-369175422006790866, 'swg', 150), (5473401298224946764, 'crud', 50), (5971043325587305850, 'loot', 200)]