tools = {"Wooden_Sword1" : 10, "Bronze_Helmet1 : 20}
我已经编写了添加项目的代码,我正在添加项目,如下所示:
tools[key_to_find] = int(b)
key_to_find
是工具,b
是耐用性,我需要找到一种方法,因此,如果我要添加并且Wooden_Sword1
已经存在,它将添加一个{{1} }。这也必须与其他物品一起使用
答案 0 :(得分:2)
正如user3483203和ShadowRanger所评论的那样,在密钥字符串中使用数字作为数据的一部分可能是个坏主意。操纵这些数字将很尴尬,还有更好的选择。例如,使用简单的键并存储列表,而不是为每个编号的键存储单个值。列表中的索引将替换键中的数字。
这是实现它的方法:
tools = {"Wooden_Sword" : [10], "Bronze_Helmet" : [20]}
添加耐用性为10的新木剑:
tools.setdefault("Wooden_Sword", []).append(10)
查找我们拥有多少个青铜头盔:
helmets = tools.get("Bronze_Helmet", [])
print("we have {} helmets".format(len(helmets)))
找到第一个具有非零耐用性的青铜头盔,并将其减少1:
helmets = tools.get("Bronze_Helmet", [])
for i, durability in helmets:
if durability > 0:
helmets[i] -= 1
break
else: # this runs if the break statement was never reached and the loop ran to completion
take_extra_damage() # or whatever
您可以通过使用collections.defaultdict
而不是常规词典来简化其中一些代码,但是如果您学习如何使用get
和setdefault
,那么使用它并不难常规的dict
。
答案 1 :(得分:0)
据我对问题的了解,您的密钥分为2个部分:“名称”和“ ID”。 ID只是一个以1开头的整数,因此您可以为每个名称初始化一个计数器:
Option Explicit
Private Sub CommandButton1_Click()
Static pwd As String
try_again:
If pwd <> "thePassword" Then
'password challenge
pwd = InputBox(Prompt:="Please enter the password to unlock the updater." & vbLf & "(Case Sensitive)", _
Title:="Control Panel")
'check if the password challenge was cancelled
If pwd = vbNullString Then Exit Sub
'compare again
GoTo try_again
End If
'all the good code once the password challenge has been passed
Debug.Print "pass"
End Sub
并添加到数组中:
numOfWoodenSwords = 0
如果您需要未知数量的工具,建议您查看re模块:https://docs.python.org/3/library/re.html。
或者您可以遍历numOfWoodenSwords += 1
tools["wodden_sword" + str(numOfWoodenSwords)] = int(b)
来查看条目是否存在。
答案 2 :(得分:0)
要确保密钥名称尚未被使用,并添加一个数字(如果已输入),请创建新名称并进行测试。如果已经在列表中,则增加该数字。重复一遍,直到找不到为止。
在代码中:
anydpi-v26
尽管此代码可以完成您所要求的操作,但您可能需要查看其他方法。可能的缺点是def next_name(basename, lookup):
if basename not in lookup:
return basename
number = 1
while basename+str(number) in lookup:
number += 1
return basename+str(number)
和WoodenShoe1
之间没有关联 –如果“所有木鞋”都需要提高价格,则必须反复进行WoodenShoe55
和1
之间的所有可能名称,以防万一这些名称有时存在。
答案 3 :(得分:0)
您可以编写一个确定字符是否为字母的函数:
def is_letter(char):
return 65 <= ord(char) <= 90 or 97 <= ord(char) <= 122
然后,当您查看字典中的键时,只需:
if is_letter(key[-1]):
...