遍历python字典并从列表中返回匹配值

2024-06-16 12:17:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难让这段代码运行,希望得到大家的帮助。我有一个字典和一个列表,我需要遍历该列表并返回具有匹配值的字典。这是我到目前为止的代码,以及我可以打印到excel的desire输出

allJobs = {'A':[1,2,3],
           'B':[2,3,4],
           'C':[1,3],
           'D':[3,4]}

Jobs = ['A','C']

JobsWithNums = {}
matchJobs =[]


for jobs in allJobs:
    if jobs in Jobs:
        JobsWithNums.append(jobs)
        
print(JobsWithNums)
JobsWithNums = {'A':[1,2,3],
                'C':[1,3]}

Tags: 代码in列表forif字典jobsexcel
3条回答

错误原因-

python中的Dictionary没有append()方法,因此您将得到类似这样的错误-

<module>AttributeError: 'dict' object has no attribute 'append'>

因此,append方法不能与dictionary一起添加新的key:value对。因此,您必须按照我在下面代码中显示的方式使用它


正确的解决方案-

当您找到匹配的键时,您必须迭代字典中的键并附加键的值。您应该按照以下方式进行操作-

allJobs = {'A':[1,2,3],
           'B':[2,3,4],
           'C':[1,3],
           'D':[3,4]}

Jobs = ['A','C']

JobsWithNums = {}
matchJobs =[]


for jobs in allJobs.keys():
    if jobs in Jobs:
        JobsWithNums[jobs] = allJobs[jobs]
      # ^ : Adding the value corresponding to jobs when jobs is present in Jobs list
      # You were trying to do with append which is not the valid way to add a key to dictionary
print(JobsWithNums)

输出:

{'A': [1, 2, 3], 'C': [1, 3]}

请注意,append方法不适用于dictionary。所以你必须像我在代码中那样使用它。您也可以使用^{}方法来完成。请参阅以下片段-

for jobs in allJobs.keys():
    if jobs in Jobs:
        JobsWithNums.update({jobs:allJobs[jobs]})
       # Another possible variant =>
       # JobsWithNums.update(jobs=allJobs[jobs])

但与第一种方法相比,这可能是一种效率低下的方法。仅当您必须同时将多个键更新到字典中时才使用它


另一种方法-

一种较短(pythonic)的方法如下=>

allJobs = {'A':[1,2,3],'B':[2,3,4],'C':[1,3],'D':[3,4]}    
Jobs = ['A','C']
               # The below code just says, add job_name:value pair if job_name exists in Jobs list
JobsWithNums = {job_name: value for job_name, value in allJobs.items()
                if job_name in Jobs}

print(JobsWithNums)

输出:

{'A': [1, 2, 3], 'C': [1, 3]}

您可以在此处了解有关这些的更多信息-python docs

希望这有帮助

您可以尝试以下方法:

for job in allJobs.keys():
    if job in Jobs:
        JobsWithNums[job] = alljobs[job]

这里的.key()返回作业(A、B、C、D)的名称,稍后您可以像alljobs一样引用它来获取值

append方法的工作方式与您对字典的期望不同。您可以在循环中执行以下操作来绕过此问题:

for jobs, nums in allJobs.items():
    if jobs in Jobs:
        JobsWithNums[jobs] = nums

这是迭代字典中的所有键和值,并在新JobsWithNums dict中创建这些条目

或者,您可以使用dict comprehension在一行中构建相同的列表:

JobsWithNums = {k:v for k,v in allJobs if k in Jobs}

相关问题 更多 >