我很难使这段代码运行,希望能得到大家的帮助。我有一个字典和一个列表,我需要遍历该列表并返回具有匹配值的字典。这是我到目前为止拥有的代码,以及我也可以打印出对Excel的需求输出
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]}
答案 0 :(得分:3)
Python中的词典没有append()
方法,因此您将收到类似这样的错误-
<module>AttributeError: 'dict' object has no attribute 'append'>
因此,append方法不适用于添加新的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方法不适用于字典。因此,您必须像在代码中一样使用它。您也可以使用dict.update()
方法。请参考以下代码段-
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
希望这会有所帮助!
答案 1 :(得分:1)
您可以尝试以下方法:
for job in allJobs.keys():
if job in Jobs:
JobsWithNums[job] = alljobs[job]
此处的.key()返回作业的名称(A,B,C,D),稍后您可以像alljobs
一样引用它以获得值。
答案 2 :(得分:0)
append方法不适用于字典。您可以在循环中执行以下操作来解决此问题:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int edad[100], n, i, emayor=0;
float suma;
do {
cout << "Ingrese su edad: ";
cin >> edad[i];
suma+=edad[i];
i++;
cout << "\n\nDesea Ingresar Edades? (1/0) ";
cin >> n;
} while(n==1 && i<100);
cout << "La sumatoria de edades es: "<< suma;
if (edad[i]>emayor) {
emayor=edad[i];
cout << "\nLa edad mayor es: "<<emayor;
}
getch();
return 0;
}
这将遍历字典中的所有键和值,并在新的JobsWithNums字典中创建这些条目。
或者,您也可以使用dict理解力在一行中建立相同的列表:
for jobs, nums in allJobs.items():
if jobs in Jobs:
JobsWithNums[jobs] = nums
答案 3 :(得分:0)
通过字典理解,您可以轻松地做到这一点:
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]}
答案 4 :(得分:0)
一种更好的方法是遍历列表,如果字典中存在该元素,则将其追加到JobsWithNums。 这样做的一个优点是,您只需要遍历列表一次,字典的查找时间为O(1),因此效率更高。
JobsWithNums = {}
for job in Jobs:
if allJobs.get(job):
JobsWithNums[job] = allJobs[job]
如果不存在密钥,则字典上的get()返回None
答案 5 :(得分:0)
感谢您提供的所有帮助,我已经能够运行它。另外我正在尝试使用pandas数据框将结果导出到excel,但无法做到这一点,并遇到必须全部相同长度的数组错误-我如何将数据框的列命名为Jobs,Nums < / p>
df = pd.DataFrame(JobsWithNums)
df.to_excel("file.xlsx")