gpt4 book ai didi

Python:如何添加两个列表,其中与该键的值相同的键没有重复值?

转载 作者:行者123 更新时间:2023-12-01 04:26:50 27 4
gpt4 key购买 nike

我有这个文件:

domain|nsservers
virus.am.|['ns101.yourhostservice.com.', 'ns102.yourhostservice.com.']
rochemme.ae.|['auhans1.ecompany.ae.', 'auhans2.ecompany.ae.', 'dxbans1.ecompany.ae.', 'dxbans2.ecompany.ae.']
virus.am.|['ns101.yourhostservice.com.', 'ns102.yourhostservice.com.','ns103.yourhostservice.com.']
rochemme.ae.|['auhans2221.ecompany.ae.']

我想用这种格式创建一个新文件。

domain|list of all unique nsservers
virus.am.|['ns101.yourhostservice.com.', 'ns102.yourhostservice.com.','ns103.yourhostservice.com.']
rochemme.ae.|['auhans1.ecompany.ae.', 'auhans2.ecompany.ae.', 'dxbans1.ecompany.ae.', 'dxbans2.ecompany.ae.','auhans2221.ecompany.ae.']

这是我使用的代码。但它没有给我我想要的结果:

from collections import defaultdict


file = './test'
dns_dic = defaultdict(set)

f = open(file,'r')
for line in f:
line = line.strip()
domain,nslist = line.split('|')
if domain in dns_dic:
dns_dic[domain].append(nslist)
else:
dns_dic[domain] = (nslist)
print(dns_dic)

如何将这些列表组合为 key 的唯一值(在本例中为域名?)任​​何人都可以帮助我吗?

最佳答案

当您创建defaultdict时就像-

dns_dic = defaultdict(set)

这意味着 set() 将用作字典中未找到的键的默认值。但这并不意味着您直接包含在字典中的值(使用 - dns_dic[domain] = (nslist) )将转换为 set )。当您直接为其设置字符串/列表时,不会发生此类转换。

另一件事是你正在使用 defaultdict 这样你就不必检查 key 是否已经存在等。但是你仍然在做那个检查 - if domain in dns_dic:。你不需要那个。

另一个问题 -

  1. nslist 是一个字符串(不是列表),因此它没有任何 .append() 方法,因此这对您来说应该是错误的 - dns_dic[域].append(nslist) .

您应该利用defaultdict默认创建set的能力,而不是直接赋值。只有这样你才能得到集合作为值。为此,您可以执行类似的操作 - dns_dic[domain].update(nslist)

并且在将字符串添加到字典/集合之前,您应该使用 ast.literal_eval 将字符串转换为 list

此外,您应该使用 with 语句打开文件(以便它自动为您处理关闭文件。

示例 -

from collections import defaultdict
import ast

file = './test'
dns_dic = defaultdict(set)

with open(file,'r') as f:
for line in f:
line = line.strip()
domain,nslist = line.split('|')
nslist = ast.literal_eval(nslist)
dns_dic[domain].update(nslist)

print(dns_dic)

之后,您可以打开一个文件并将字典的元素写入该文件。示例-

with open('filetowrite','w') as of:
for k,v in dns_dic.items():
of.write('{}|{}'.format(k,v))

关于Python:如何添加两个列表,其中与该键的值相同的键没有重复值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32988232/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com