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
是玩家索引。您可以从该列表中添加/删除,或获取玩家的第一个