我有以下字典:
players = {'Roger': ['player1', 'dA'], 'Luka': ['player2', 'sK']}.
我想更新包含'player2'
的密钥,但是
我无法更新玩家[Luka]
,因为'player2'
并非总是Luka
。如何选择与'player2'
关联的密钥?
(对于那些想知道的人,dA = Ace of Diamonds
,sK = King of Spades
。这些值每次都会有所不同。
编辑: 这是我的代码的一部分:(它不会运行,因为我遗漏了很多混乱)
qPlayers = 2 #Amount of players
def game(qPlayers):
players[nr]["value"].append(new_card)
deal_to =[]
for player in players:
deal_to.append(player)
deal(qPlayers,deck,players,deal_to)
def setup(qPlayers):
playerhands = []
for x in range(1,qPlayers+1):
player = {}
player["name"] = input("Enter your name, player {}\n>>>".format(x))
playerhands.append(player)
return playerhands
def deal(qPlayers,deck,players,deal_to):
nr = -1
for player in deal_to:
nr +=1
new_card = getCard(deck) #getCard produces a random card like sA, k9, cQ
答案 0 :(得分:2)
您可以跟踪key
中dict
包含player2
值的dict
,否则您必须遍历key
,直至找到value
def findKeyWithValue(value):
for playerName, playerData in players.items():
if value in playerData:
# your code here
1}}那样做。如果您经常需要根据UInt8(value)
内部的内容进行搜索,则可能需要重新考虑用于存储此数据的数据结构。
extension Data {
func int8Value() -> Int8 {
var value: UInt8 = 0
copyBytes(to: &value, count: MemoryLayout<UInt8>.size)
return Int8(value)
}
}
答案 1 :(得分:1)
这里有两个选项:
搜索整个目录,检查包含'player2'的值。这最终效率低下,并使字典结构有些无用。
使用列表而不是字典,并相应地对数据建模,类似于下面的示例。
此数据结构的一个优点是您不需要冗余的player1
/ player2
标识符,因为列表索引会隐式提供。要引用player2
,您需要从列表中选择第二个元素(players[1]
,因为索引从0开始)。
players = [
{'Name' : 'Roger', 'Value' : 'dA'},
{'Name' : 'Luka', 'Value' : 'sK'}
]
答案 2 :(得分:1)
您可以迭代字典以查找要更新的密钥。 dict.iteritems()
将在python 2.7中完成这项工作。
players = {'Roger': ['player1', 'dA'], 'Luka': ['player2', 'sK']}
for key, value in players.iteritems():
if value[0] == "player2":
players[key][1] = "sQ"
print players