使用dict替换列表项

时间:2016-07-07 10:04:13

标签: python list file dictionary

我正在尝试修复我最近写过的这段代码。它应该采用一个列表和一个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等

4 个答案:

答案 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())