我正在尝试修复我最近写过的这段代码。它应该采用一个列表和一个dict(下面),然后如果列表中的项目与字典中的项目匹配,它应该将它附加到列表中。我知道它试图将列表中的项目与dict的错误部分进行匹配,但我不知道如何解决这个问题。任何帮助将不胜感激!
[1,2,3,4,5,6,7,8]
{'a': 1,'b': 2,'c': 3}
text_print('\nPlease input your file location: ')
location = input()
with open(location) as f:
c = literal_eval(f.readline())
d = literal_eval(f.readline())
n_string = []
text_print(str(c))
text_print('\n')
text_print(str(d))
for item in c:
if item in d:
n_string.append(str(item))
text_print(str(n_string))
代码应输出b c d等
答案 0 :(得分:2)
我不确定我理解文件的用途。你能提供更多相关信息吗?在你的例子中,“c”是列表还是字典?什么是“d”?
无论如何,在你的循环中,你只是将字典的键与列表的项目进行比较,因此没有一个匹配,因为列表中的项目是数字,而字典的键是字母。 您需要将词典的值与列表中的项目进行比较。我在下面举了一个例子。
yourlist = [1,3]
yourdict = {'a': 1,'b': 2,'c': 3}
n_string = []
for key in yourdict:
if yourdict[key] in yourlist:
n_string.append(key)
print(n_string)
此示例解析字典并检查其值是否在列表中。如果值(数字)在列表中,则它将键(字母)添加到输出列表。
答案 1 :(得分:0)
您应该在dict
中切换键和值。假设您无法更改输入,可以在加载后转换dict:
d2 = {val: key for key, val in d.items()}
然后你可以直接查找项目。
for item in c:
try:
n_string.append(str(d2[item]))
except KeyError:
pass
text_print(str(n_string))
答案 2 :(得分:0)
那是因为你在列表项d.vales()
的比较中检查了dict。获取字典值n_string
并进行比较。在此操作中获取[1,2,3,4,5,6,7,8]
{'a': 1,'b': 2,'c': 3}
text_print('\nPlease input your file location: ')
location = input()
with open(location) as f:
c = literal_eval(f.readline())
d = literal_eval(f.readline())
n_string = []
nn_string = []
text_print(str(c))
text_print('\n')
text_print(str(d))
for item in c:
if item in d.values():
n_string.append(str(item))
text_print(str(n_string))
for itemcur in n_string:
for key, value in d.iteritems():
if str(value) == str(itemcur):
nn_string.append(str(key))
print(str(nn_string))
值后,使用键运行for循环,值如下所示:
' Generate Data Sub Function
Sub Send_listbox_list_to_function()
' Function to Create and populate the class
' -> Require's the listbox and the directory location
If Right(frmMain.txtDIR, 1) = "\" Then
Call Create_Class(frmMain.lstDIR, frmMain.txtDIR.Value)
Else
Call Create_Class(frmMain.lstDIR, frmMain.txtDIR.Value + "\")
End If
End Sub
请注意缩进错误(如果有)。提供必要的空间!
答案 3 :(得分:0)
遍历字典以查看列表中的任何值是否在字典中。如果存在,请将密钥附加到result
列表。
my_list = [1,2,3,4,5,6,7,8]
my_dict = {'a': 1,'b': 2,'c': 3,'d':3,'e':15}
result = []
for num in my_list:
for key,value in my_dict.items():
if num == value:
result.append(key)
print result
<强>输出:强>
['a','b','c','d']
为了减少比较次数,您可以获得列表和字典键的交集并迭代它。
set(my_list).intersection(my_dict.values())