Tengo el siguiente diccionario:

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

Quiero actualizar la clave que contiene 'player2', pero No puedo actualizar a los jugadores [Luka] porque 'player2' no siempre es Luka. ¿Cómo puedo seleccionar claves vinculadas a 'player2'?

(para aquellos que se preguntan, dA = Ace of Diamonds, sK = King of Spades. Estos valores también serán diferentes cada vez).

Editar: Aquí está la parte de mi código: (No se ejecutará porque dejé mucho desorden)

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
RnRoger 14 ene. 2017 a las 20:43

3 respuestas

La mejor respuesta

Tienes dos opciones aquí:

  1. Busque en todo el directorio, verificando el valor que contiene 'player2'. Esto termina siendo ineficiente y hace que la estructura del diccionario sea algo inútil.

  2. Use una lista en lugar de un diccionario, y modele sus datos en consecuencia, similar al ejemplo a continuación.

Una ventaja de esta estructura de datos es que no necesita los identificadores redundantes player1 / player2, ya que el índice de la lista lo proporciona implícitamente. Para hacer referencia a player2, tomaría el segundo elemento de la lista (players[1] ya que la indexación comienza en 0).

players = [
    {'Name' : 'Roger', 'Value' : 'dA'},
    {'Name' : 'Luka', 'Value' : 'sK'}
]
1
nbrooks 14 ene. 2017 a las 17:55

Puede realizar un seguimiento de qué key en el dict contiene su valor player2, o tendrá que recorrer el dict hasta que encuentre un key Eso hace. Si necesita buscar con frecuencia en base a algo interno de value, es posible que desee reconsiderar la estructura de datos que está utilizando para almacenar estos datos.

def findKeyWithValue(value):
    for playerName, playerData in players.items():
        if value in playerData:
            # your code here
2
A. Sokol 14 ene. 2017 a las 17:50

Puede iterar el diccionario para encontrar la clave para actualizar. dict.iteritems() hará ese trabajo en 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
1
ImportanceOfBeingErnest 14 ene. 2017 a las 17:57