python 我怎么能把这么多的“if”转换成“for”呢?

bvuwiixz  于 2023-03-16  发布在  Python
关注(0)|答案(4)|浏览(207)

我正在用Python的字典做作业。
我发现我不能为字典写索引,因为我是Python的初学者。
但我不喜欢你说“如果”和“其他”。
你怎么能把这个变成“为了”?
这是类似MBTI的人格类型测试代码。
需要比较第一密钥和第二密钥的值,但是不需要比较第二密钥和第三密钥的值。
我想要这样的比较。“如果myDict[currentKey]〉myDict[nextKey]:“
这是我密码。

myDict={"R":0,"T":2,"C":3,"F":5,"J":2,"M":1,"A":4,"N":6}

    if myDict["R"] >= myDict["T"]: #
        myString += "R"
    else:
        myString += "T"
    if myDict["C"] >= myDict["F"]:
        myString += "C"
    else:
        myString += "F"
    if myDict["J"] >= myDict["M"]:
        myString += "J"
    else:
        myString += "M"
    if myDict["A"] >= myDict["N"]:
        myString += "A"
    else:
        myString += "N"

print(myString)

我想要这样的比较。“如果myDict[currentKey]〉myDict[nextKey]:“

omqzjyyz

omqzjyyz1#

可以迭代任意选择的键对,并使用传递给max的自定义键查找函数选择与较大值myDict对应的键:

myDict = {"R": 0, "T": 2, "C": 3, "F": 5, "J": 2, "M": 1, "A": 4, "N": 6}
myString = ""

pairs = [("R", "T"), ("C", "F"), ("J", "M"), ("A", "N")]

for left, right in pairs:
    myString += max(left, right, key=myDict.get)

print(myString)

产出

TFJN
0vvn1miw

0vvn1miw2#

一种方法是按索引迭代字典元素:
然而,正如@roganjosh提到的,这依赖于字典排序,对于3.7以下的版本,字典排序是不保证的
根据应用程序的不同,元组列表可能是更好的选择

myData = [("R", 0),(..),...]

但是如果您希望能够访问给定键的值并利用散列,则将其保留为dict。

# notice the -1, since we are comparing to the next element, 
# we can only iterate until the penultimate one.
for i in range(len(myDict.keys())-1):
    # then you can compare the current element with the next one and 
    # append the greater key to myString
    if myDict.keys()[i] >= myDict.keys()[i+1]
        myString += myDict.keys()[i]  
    else: 
        myString += myDict.keys()[i+1]
bihw5rsg

bihw5rsg3#

我将使用iter()而不是字典中的items(),以便一次处理两个条目。

myDict={"R":0,"T":2,"C":3,"F":5,"J":2,"M":1,"A":4,"N":6}

my_dict_iter = iter(myDict.items())
myString = ""
for key1, value1 in my_dict_iter:
    key2, value2 = next(my_dict_iter)
    myString += key1 if value1 >= value2 else key2

print(myString)

这应该给予你:

TFJN
w3nuxt5m

w3nuxt5m4#

此解决方案将循环遍历字典中的键并使用所需的比较。请记住,这可能不是最佳解决方案。因此,如果不必使用字典并按最初希望的方式循环,请考虑使用其他解决方案之一。

myDict = {"R":0,"T":2,"C":3,"F":5,"J":2,"M":1,"A":4,"N":6}
keys = list(myDict.keys())

myString = ""
for i in range(0, len(keys), 2):
    currentKey = keys[i]
    nextKey = keys[i + 1]

    if myDict[currentKey] >= myDict[nextKey]:
        myString += currentKey
    else:
        myString += nextKey

print(myString)

相关问题