来自字符串和变量值组合的字典键名称

Jon*_*ndi 2 python python-3.x

基本上,我试图将列表中的值作为键值对附加到新字典中。我想要特定格式和顺序的键名称。

#!/usr/bin/env python3
ipv4_list = ["192.168.1.2", "192.168.1.3", "192.168.1.4"]
ipv4_dic = {}
ipv4_len = len(ipv4_list)
i = 1

for val in range(len(ipv4_list)):
    ipv4_dic[i] = ipv4_list[val]
    i+=1

print(ipv4_dic)
Run Code Online (Sandbox Code Playgroud)

电流输出:

{1: '192.168.1.2', 2: '192.168.1.3', 3: '192.168.1.4'}
Run Code Online (Sandbox Code Playgroud)

上面的内容很好,但我想将键名称更改为 IP1、IP2 等。

我怎样才能做到这一点ipv4_dic[i] = ipv4_list[key]

我尝试过类似的方法ipv4_dic["IP"+i]但不起作用。

    ipv4_dic["IP"+i] = ipv4_list[val]
TypeError: can only concatenate str (not "int") to str
Run Code Online (Sandbox Code Playgroud)

预期的字典输出如下:

{IP1: '192.168.1.2', IP2: '192.168.1.3', IP3: '192.168.1.4'}
Run Code Online (Sandbox Code Playgroud)

Joh*_*gio 5

它不起作用,因为您试图将字符串与整数连接起来,这在 Python 中是不允许的。

为了让您的代码以尽可能少的修改工作,可以i通过函数将整数转换为字符串str(),即在代码中替换

ipv4_dic["IP"+i] = ipv4_list[val]
Run Code Online (Sandbox Code Playgroud)

ipv4_dic["IP"+str(i)] = ipv4_list[val]
Run Code Online (Sandbox Code Playgroud)

但是,您可以使用字典理解,即循环要创建的每个位置,在一行代码中ipv4_dic放置根据您的每个元素构建的键。ipv4_list

ipv4_list = ["192.168.1.2", "192.168.1.3", "192.168.1.4"]
ipv4_dic = {f"IP{i+1}": ipv4_list[i] for i in range(len(ipv4_list))}
Run Code Online (Sandbox Code Playgroud)

解释:对于从到i范围内的每个,我们通过 构建单个字典键,将字符串连接到值(范围从 开始,但您希望第一个字典元素是,这就是原因)。然后,我们将此键的值设置为,它们是起始列表中包含的单个元素。0len(ipv4_list)f-string"IP"i+10"IP1"i+1ipv4_list[i]

基本用法是

l = ['A', 'B', 'C']

d = {i : l[i] for i in range(len(l))}
Run Code Online (Sandbox Code Playgroud)

这与您的情况非常相似,没有对键创建进行改进,因为您正在增加索引(即i)并将其连接到字符串。