迭代 dict 和 list2d,list_value 被替换为 str

问题描述 投票:0回答:1

我正在遍历一个字典,然后遍历一个二维列表[list[float|int] 然后我将 list2d 的值更改为 dict 中对应的值 随机出现一个str

在测试中,我根据 list2d 示例的大小进行了更改:

50, 50 = 13, 49

80, 80 = 15, 48

terrain_probability_dict: {float | int, str} = {-1: "e", 0.2 : "o", 0.5 : "M", 1 : "#"}
def generate_terrain(world: list[list[str]]):

    keys = sorted(terrain_probability_dict.keys())
    for i in range(1, len(keys)):
        for y in range(len(world)):
            for x in range(len(world[0])):
                if keys[i - 1] < world[y][x] <= keys[i]:
                    world[y][x] = terrain_probability_dict[keys[i]]

我是如何检查的:

for y in range(len(world)):
    for x in range(len(world[0])):
        # Print only if the type of the current value is string

        if isinstance(world[y][x], str):
            print(f"Initial value at world[{y}][{x}]: {world[y][x]} (Type: {type(world[y][x])})")
        #and
        print(y, x)

迭代之前以及迭代中的if isinstance代码 从打印中我发现迭代时列表中有一个“M”或“o”

为什么world中的index会变成world中的int

python list dictionary iteration
1个回答
0
投票

在检查先前值是否在某个区间内之后,您将字符串分配给

world[y][x]
。不幸的是,当您检查下一个间隔时,这种情况就会中断。您可能不应该对输入和输出使用相同的列表。

如果您对代码进行了类型检查,类型检查器会反对,因为您将二维数字列表传递到一个函数,该函数表示它需要

list[list[str]]
。该函数的某些代码需要数字,而其他部分则需要分配字符串。

如果您确实想转换列表的内部类型,您可能可以重新排序循环,并在找到匹配的键时跳出循环(并且可能会执行其他操作,例如引发异常,如果您永远找不到匹配)。

© www.soinside.com 2019 - 2024. All rights reserved.