Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将多个值附加到具有相同键的字典_Python_Pandas_Dataframe_Dictionary_Defaultdict - Fatal编程技术网

Python 将多个值附加到具有相同键的字典

Python 将多个值附加到具有相同键的字典,python,pandas,dataframe,dictionary,defaultdict,Python,Pandas,Dataframe,Dictionary,Defaultdict,试图了解这里的最佳想法/实践是什么。。我与不同地点的面试官有一个数据框架。。我想创建一个字典或某种数据结构,保存面试官的姓名,然后保存面试官的每个坐标点。我正在使用的数据帧示例如下: interview longitude latitude 1 A1 34.2 90.2 2 A1 54.2 23.5 6 A1

试图了解这里的最佳想法/实践是什么。。我与不同地点的面试官有一个数据框架。。我想创建一个字典或某种数据结构,保存面试官的姓名,然后保存面试官的每个坐标点。我正在使用的数据帧示例如下:

    interview       longitude        latitude
1   A1                  34.2             90.2
2   A1                  54.2             23.5
6   A1                  NaN              NaN
7   A2                  NaN              NaN
8   A2                  NaN              NaN
9   A2                  23.1             38.2
10  A2                  -23.7            -98.4
我希望基本上有一本有“A1”的字典,它可以容纳(34.2,90.2),(54.2,23.5),“A2”可以容纳(23.1,39.2),(-23.7,-98.4)

我在这里的逻辑有点不正确,但我没有任何方法“附加”到字典中,所以我的字典只输出上次迭代iterrows的数据。。。我该如何着手解决这个问题

一种解决方案,使用:

另一个使用:


由于
defaultdict
dict
的一个子类,因此通常不需要进一步的操作。

现在存储一个元组作为值。试着从那里推断一点;元组是一个容器,就像字典是一个容器一样。知道可以用来保存多个元组的其他容器吗?换言之:需要为字典值选择一个容器类型,以便将这些多个元组存储在其中。字典只是将键映射到值,但是这些值可以是任何类型的Python对象,包括元组、其他字典等等。我应该将所有元组放入列表中,然后将它们添加到面试官键中吗?对于面试官键,如果该键尚未在字典中,请向字典中添加一个列表。如果该键已经在字典中,只需将其附加到存在的列表中即可。您可以使用
location\u dict.setdefault(name,[]).append((行['Longitude',行['Latitude'))
,一步完成测试,添加一个尚未存在的列表,并将其附加到列表中。
    location_dict = {}
    for name, group in df.groupby('Interviewer'):
        minidf = group[['Interviewer','Longitude','Latitude']].dropna()
        for index, row in minidf.iterrows():
            location_dict[name]=(row['Longitude'], row['Latitude'])
def zipper(row):
    return list(zip(row['longitude'], row['latitude']))

res = df.dropna(subset=['longitude', 'latitude'])\
        .groupby('interview').apply(zipper).to_dict()

# {'A1': [(34.2, 90.2), (54.2, 23.5)],
#  'A2': [(23.1, 38.2), (-23.7, -98.4)]}
from collections import defaultdict

res = defaultdict(list)
for row in df.dropna(subset=['longitude', 'latitude']).itertuples(index=False):
    res[row.interview].append((row.longitude, row.latitude))