Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于值更新字典键_Python_Dictionary - Fatal编程技术网

Python 基于值更新字典键

Python 基于值更新字典键,python,dictionary,Python,Dictionary,我有以下字典: players = {'Roger': ['player1', 'dA'], 'Luka': ['player2', 'sK']}. 我想更新包含'player2'的密钥,但是 我无法更新玩家[Luka],因为'player2'并不总是Luka。如何选择链接到'player2'的键 (对于那些想知道,dA=Ace of Diamonds,sK=King of Spades的人来说,这些值每次都会不同) 编辑: 下面是我代码的一部分:(它不会运行,因为我遗漏了很多杂乱的东西)

我有以下字典:

players = {'Roger': ['player1', 'dA'], 'Luka': ['player2', 'sK']}. 
我想更新包含
'player2'
的密钥,但是 我无法更新玩家
[Luka]
,因为
'player2'
并不总是
Luka
。如何选择链接到
'player2'
的键

(对于那些想知道,
dA=Ace of Diamonds
sK=King of Spades
的人来说,这些值每次都会不同)

编辑: 下面是我代码的一部分:(它不会运行,因为我遗漏了很多杂乱的东西)


您可以跟踪
dict
中的哪个
包含您的
player2
值,否则您必须遍历
dict
,直到找到一个
键为止。如果经常需要基于
值的内部内容进行搜索,则可能需要重新考虑用于存储此数据的数据结构

def findKeyWithValue(value):
    for playerName, playerData in players.items():
        if value in playerData:
            # your code here

您可以跟踪
dict
中的哪个
包含您的
player2
值,否则您必须遍历
dict
,直到找到一个
键为止。如果经常需要基于
值的内部内容进行搜索,则可能需要重新考虑用于存储此数据的数据结构

def findKeyWithValue(value):
    for playerName, playerData in players.items():
        if value in playerData:
            # your code here

这里有两个选项:

  • 搜索整个目录,检查包含“player2”的值。这将导致效率低下,并使字典结构有些无用

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

  • 此数据结构的一个优点是,您不需要冗余的
    player1
    /
    player2
    标识符,因为列表索引隐式提供了该标识符。要引用
    player2
    ,您需要从列表中获取第二个元素(
    players[1]
    ,因为索引从0开始)


    这里有两个选项:

  • 搜索整个目录,检查包含“player2”的值。这将导致效率低下,并使字典结构有些无用

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

  • 此数据结构的一个优点是,您不需要冗余的
    player1
    /
    player2
    标识符,因为列表索引隐式提供了该标识符。要引用
    player2
    ,您需要从列表中获取第二个元素(
    players[1]
    ,因为索引从0开始)


    您可以迭代字典以查找要更新的密钥
    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
    

    您可以迭代字典以查找要更新的密钥
    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
    


    那么,为什么不使用
    'player1'
    'player2'
    作为键,并将名称存储在值中呢?否则,你必须搜索所有的值以找到匹配的值,这是非常低效的,使得首先使用字典是毫无意义的。我正考虑这样做。我问这个问题并不是为了解决这个特殊的问题,而是想问是否有可能这样做。如何做到这一点。。。。或者使用包含两个子列表的列表,或者只使用两个变量
    player1
    player2
    而不是字典。那么为什么不使用
    'player1'
    'player2'
    作为键,并将名称存储在值中呢?否则,你必须搜索所有的值以找到匹配的值,这是非常低效的,使得首先使用字典是毫无意义的。我正考虑这样做。我问这个问题并不是为了解决这个特殊的问题,而是想问是否有可能这样做。如何做到这一点。。。。或者使用包含两个子列表的列表,或者只使用两个变量
    player1
    player2
    ,而不是字典。谢谢,这非常有用。如果字典只是按照相同的键顺序添加,那就容易多了。我知道有很多方法可以做到这一点,但它们对我来说太复杂了。如果你想要一个有序的
    dict
    ,你不应该使用
    dict
    @nbrooks有一个很好的例子,它可能对你更有用。谢谢,这非常有用。如果字典只是按照相同的键顺序添加,那就容易多了。我知道有很多方法可以做到这一点,但它们对我来说太复杂了。如果你想要一个有序的
    dict
    ,你不应该使用
    dict
    @nbrooks有一个很好的例子,对你来说可能会更好。那么列表中有一本字典吗?@RnRoger yes,或者根据你的需要有一些变化。那么我如何获得或向玩家添加卡片呢?(我一直在尝试,但无法理解)@RnRoger如果一个玩家可以有多张牌,请将value属性更改为列表而不是字符串
    'value':['dA','hQ','sK',…]
    。然后玩家的卡片列表是
    players[i]['Value']
    ,其中
    i
    是玩家索引。你可以从列表中添加/删除,或者使用
    players[i]['Value'][0]
    获取玩家的第一张牌。你能指出我做错了什么吗?我在帖子中添加了我的代码。(我自己也在尝试,但我就是无法让它发挥作用。我对图书馆很陌生,但确实想使用它们。)那么,列表中有一本字典吗?@RnRoger-Yep,或者根据您的需要做一些变化。那么我如何获得或向玩家添加卡片呢?(我一直在尝试,但无法理解)@RnRoger如果一个玩家可以有多张牌,请将value属性更改为列表而不是字符串
    'value':['dA','hQ','sK',…]
    。然后玩家的卡片列表是
    players[i]['Value']
    ,其中
    i
    是玩家索引。您可以从该列表中添加/删除,或获取玩家的第一个