根据值更新字典键

时间:2017-01-14 17:43:33

标签: python dictionary

我有以下字典:

players = {'Roger': ['player1', 'dA'], 'Luka': ['player2', 'sK']}. 

我想更新包含'player2'的密钥,但是 我无法更新玩家[Luka],因为'player2'并非总是Luka。如何选择与'player2'关联的密钥?

(对于那些想知道的人,dA = Ace of DiamondssK = 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

3 个答案:

答案 0 :(得分:2)

您可以跟踪keydict包含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)

这里有两个选项:

  1. 搜索整个目录,检查包含'player2'的值。这最终效率低下,并使字典结构有些无用。

  2. 使用列表而不是字典,并相应地对数据建模,类似于下面的示例。

  3. 此数据结构的一个优点是您不需要冗余的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