gpt4 book ai didi

python - 通过将列表作为键参数传递,使用 sorted() 对列表进行排序

转载 作者:行者123 更新时间:2023-12-04 10:17:53 27 4
gpt4 key购买 nike

我有一个列表,其中包含标准 52 张牌组中的所有牌。我现在想知道如何按照值对这些卡片进行排序,从 A 到 K。我的想法是使用 sorted() 但我无法理解如何将列表 blueprint_deck 的顺序作为函数的键传递。

我的脚本:

import random

Clubs = ["Clubs"]
Diamonds = ["Diamonds"]
Hearts = ["Hearts"]
Spades = ["Spades"]

blueprint_deck = [ "Ace", "2", "3", "4", "5", "6", "7",
"8", "9", "10", "Jack", "Queen", "King"]

deck = [i + " of " + j for i in blueprint_deck for j in Clubs + Diamonds + Hearts + Spades]

print(deck)

这将已经返回排序的甲板,但我想知道如何在随机化列表后使用函数实现此顺序,例如:
random_list = random.sample(deck, len(deck))
print(random_list)

我需要传递给 sorted() 的关键参数什么样的函数才能实现我的目标?
我试过这样的事情:
def keyf(blueprint_deck):
return blueprint_deck

print(sorted(random_list, key=keyf))

但这似乎只是按照 sorted() 的默认顺序对其进行排序。

任何帮助表示赞赏,谢谢!

最佳答案

我会通过为每张卡片分配数字权重来解决这个任务。类似的东西:

weight = {"Ace": 1, "2": 2, "3": 3, "4": 4,
"5": 5, "6": 6, "7": 7, "8": 8,
"9": 9, "10": 10, "Jack": 11,
"Queen": 12, "King": 14}

def keyf(card):
return weight[card.split()[0]]

print(sorted(random_list, key=keyf))

通过 key 指定的函数为列表中的每个元素调用 param。这个想法是为每个元素分配某种等级。然而,由于元素表示为纯文本,我们需要首先解析它,只取最左边的部分。

更新:对这个想法的一些额外解释。

想象一下,你有一个对的列表。列表的性质并不重要,所以让它由这样的对组成 [('jack', 11), ('ace', 1), ('queen', 12)] .如果你想只使用每对中的第二个元素对列表进行排序(我称之为排名),你需要教 sorted()在对列表进行排序时仅考虑第二个元素(即排名)的函数:
lst = [('jack', 11), ('ace', 1), ('queen', 12)]
lst = sorted(lst, key=lambda c: c[1])

这是一种常见的技术,至少在 Python 世界中是如此。

现在,回到最初的任务,您并没有真正的对列表。相反,您有以下格式的字符串列表 "Ace of Clubs" , "2 of Diamonds"等。因此,首先,您需要通过在空格上拆分字符串来将每个元素转换为一对。然后,由于您对排名感兴趣,您需要将左侧部分(例如 "Ace""2" )映射到数字排名。为此,我使用这些左侧部分的字典映射到相应的数字排名值。

关于python - 通过将列表作为键参数传递,使用 sorted() 对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60995318/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com