我目前正在尝试修复我最近一直在编写的这段代码。它应该需要一个列表和一个字典(下面),然后如果列表中的项目与字典中的项目匹配,它应该将其附加到列表中。我知道它正在尝试将列表中的项目与字典的错误部分匹配,但我不知道如何解决这个问题。任何帮助将不胜感激!
[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 等
我不确定我是否理解这些文件的目的。你能提供更多关于这方面的信息吗?在您的示例中,"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)
此示例分析字典并检查其值是否在列表中。如果值(数字)在列表中,则会将键(字母)添加到输出列表中。
遍历字典以查看列表中是否有任何值在字典中。如果存在,请将密钥追加到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())
您应该在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))
那是因为您正在与列表项if item in d
进行比较时检查字典。获取字典值d.vales()
并进行比较。在此操作中获取n_string
值后,使用键运行 for 循环,值如下所示:
[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))
请注意缩进错误(如果有)。提供必要空间!