我试图将列表与字典的值进行比较,然后以不同的方式打印出比较。
我正在以这种格式列出一个列表:
list_1 = ['hostname ipaddress', 'hostname ipaddress']
然后我将它拆分成字典:
new_dict = {'hostname': 'ipaddress', etc}
我正在另外列出'感兴趣的项目':
list_interest = ['hostname', 'hostname']
与字典键值进行比较。如果匹配,我想用特殊格式打印匹配的项目,如果没有匹配,只需打印正常格式的项目。
目前,我只是想让print 'yes'
和print item
确保逻辑有效。但是你可以看到我的思维过程无效。我想有更好的方法来处理这个问题?我理解为什么我会得到重复,我只是不确定如何处理它。
测试代码
new_dict = dict((x.split(' ') for x in list_1))
for item in new_dict:
for interest in list_interest:
if new_dict.has_key(interest):
print "yes"
else:
print "\t", item
代码输出
hostname1
hostname1
hostname1
yes
hostname2
hostname2
etc
工作代码之后,参加Martijn Pieters的初步示例。
new_dict = dict((x.split(' ') for x in list_1))
for item in new_dict:
if item in interest:
print "yes"
else:
print "\t", item, new_dict[item]
答案 0 :(得分:3)
同时在字典上循环时,您的循环和测试项目过于复杂。
只测试密钥是否在列表中:
new_dict = dict((x.split(' ') for x in list_1))
for item in new_dict:
if item in list_interest:
print "yes"
else:
print "\t", item
那里的成员资格测试(item in list_interest
)将遍历列表以查看其中是否存在等于它的值。这不是那么有效,你可以在这里使用 set 进行O(1)恒定时间测试:
new_dict = dict((x.split(' ') for x in list_1))
set_interest = set(list_interest)
for item in new_dict:
if item in set_interest:
print "yes"
else:
print "\t", item
演示:
>>> list_1 = ['hostname1 ipaddress1', 'hostname2 ipaddress2', 'hostname3 ipaddress3']
>>> list_interest = ['hostname1', 'hostname3']
>>> new_dict = dict((x.split(' ') for x in list_1))
>>> set_interest = set(list_interest)
>>> for item in new_dict:
... if item in set_interest:
... print "yes"
... else:
... print "\t", item
...
yes
hostname2
yes
答案 1 :(得分:1)
您正在使用key
中的每个值检查每个list_interest
值。
假设在分割后这是你的dict
..
new_dict = {'hostname1': 'ip1', 'hostname2': 'ip2', 'hostname3': 'ip3'}
并且您的list_interest
是..
list_interest = ['hostname1', 'hostname4']
你的逻辑是这样做的...(我刚刚逃过if condition
来帮助你理解循环中发生的事情)
for item in new_dict:
for interest in list_interest:
print interest, item
输出:
hostname1 hostname1
hostname4 hostname1
hostname1 hostname2
hostname4 hostname2
hostname1 hostname3
hostname4 hostname3
因此,无需迭代list_interest
,您只需iterate
超过new_dict
并检查list_interest
中是否存在值。
for item in new_dict:
if item in list_interest:
print 'yes'
else:
print item
这将为您提供您所寻找的确切结果!
答案 2 :(得分:0)
dict_name = {1: '1', 2: '2', 3: '3'}
list_name = ['1', '2', '4']
dict_name_values = list(dict_name.itervalues())
diff = list(set(dict_name_values).difference(set(list_name)))
# or
diff = list(set(list_name).difference(set(dict_name_values)))
你需要确定你想要区别于哪种感觉,因为差异是一次只为两组中的一组确定的。
这里是文档:https://docs.python.org/2/library/stdtypes.html#set.difference