将列表中的某些值更改为整数? Python

Change certain values in a list to integers? Python

我从文件创建了这本词典。它有一个带有值列表的键。列表中的元素都是字符串。我想将索引 1 到 3 处的元素转换为整数。

这是我字典里的 key:value。

{'Youngstown': ['OH', '4110', '8065', '115436'].....}

我想将 'OH' 保留为字符串,并将所有其他元素转换为整数。

像这样:

{'Youngstown': ['OH', 4110, 8065, 115436].....}

这是我目前的代码。

d3 = {}
for k,v in d2.items():
    for i in v:
        for v in range(1,3):
            d3[k] = int(v)

print(d3)

然而,这只会给出以下结果:

{'Youngstown': 2, ...}

这是在python.

您的问题是您每次通过内部 for 循环都会覆盖 d3[k] 的值(这也会错误地覆盖 v 值)。您需要将 d3[k] 设置为列表,然后将 int 值附加到它。例如:

for k, v in d2.items():
    d3[k] = [v[0]]
    for i in range(1, 4):
        d3[k].append(int(v[i]))

您也可以考虑使用 str.isnumeric() 来检查值,并且仅在为真时才进行转换。例如:

for k, v in d2.items():
    d3[k] = [int(i) if i.isnumeric() else i for i in v]

然后可以将其包装到嵌套理解中:

d3 = { k : [int(i) if i.isnumeric() else i for i in v] for k, v in d2.items() }

鉴于:

di={'Youngstown': ['OH', '4110', '8065', '115436'],'Columbus':['OH','1','2','3']}

如果可能的话,您可以编写一个使用 try / except 转换整数的小函数:

def conv(e):
    try:
        return int(e)
    except ValueError:
        return e 
    
di={k:[conv(e) for e in v] for k,v in di.items()}

>>> di
{'Youngstown': ['OH', 4110, 8065, 115436], 'Columbus': ['OH', 1, 2, 3]}

要就地更改列表,您可以分配给列表的一部分。这形成了一个可读的简单循环:

d3 = {
    'Youngstown': ['OH', '4110', '8065', '115436'],
    'Anchorage': ['AK', '5432', '1232', '350492']
}

for l in d3.values():
    l[1:] = map(int, l[1:])

在此之后,d3 将如下所示:

{'Youngstown': ['OH', 4110, 8065, 115436],
 'Anchorage': ['AK', 5432, 1232, 350492]}

如果索引3以外的元素不想触及,可以定义切片的最终边界:

l[1:4] = map(int, l[1:4])

这应该可以满足您的要求:

d3 = {}
for k,v in d2.items():
    d3[k] = [v[0]] + [int(n) for n in v[1:]]

对于字典的每个元素,它构造一个新列表,复制第一个元素不变并将 int() 应用于其余元素。然后将结果存储在新的 dict.

示例:d2 具有以下值:

d2 = {'Youngstown': ['OH', '4110', '8065', '115436'],
      'foo': ['x', '10', '20', '30']}

它为 d3 生成以下内容:

{'Youngstown': ['OH', 4110, 8065, 115436], 'foo': ['x', 10, 20, 30]}