基本上,我试图将列表中的值作为键值对附加到新字典中。我想要特定格式和顺序的键名称。
#!/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)
它不起作用,因为您试图将字符串与整数连接起来,这在 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)并将其连接到字符串。