Python 通过元组键中的第一个值在子集中收集值

Python 通过元组键中的第一个值在子集中收集值,python,dictionary,Python,Dictionary,嗨,我有点像 pq={<Timestamp: 2008-02-02 13:30:46>: {('1059', 'latitude'): 40.064889999999998, ('1059', 'longitude'): 116.56359, ('1466', 'latitude'): 39.92163,

嗨,我有点像

pq={<Timestamp: 2008-02-02 13:30:46>: {('1059', 'latitude'): 40.064889999999998,
                                ('1059', 'longitude'): 116.56359,
                                ('1466', 'latitude'): 39.92163,
                                ('1466', 'longitude'): 116.32633,
                                ('1563', 'latitude'): 39.864249999999998,
                                ('1563', 'longitude'): 116.39328,
                                ('1827', 'latitude'): 40.003770000000003,
                                ('1827', 'longitude'): 116.30907000000001}}
pq={<Timestamp: 2008-02-02 13:30:46>: {'1059':{'latitude: 40.064889999999998,'longitude': 116.56359},
                                       '1466' :{'latitude': 39.92163,'longitude': 116.32633},
                                       '1563':{'latitude': 39.864249999999998, 'longitude':116.39328},
                                       '1827':{'latitude': 40.003770000000003,'longitude': 116.30907000000001}}
pq={:{('1059','latitude'):40.06488999998,
(‘1059’,‘经度’):116.56359,
(‘1466’,‘纬度’):39.92163,
(‘1466’,‘经度’):116.32633,
(‘1563’,‘纬度’):39.86424999998,
(‘1563’,‘经度’):116.39328,
(‘1827’,‘纬度’):40.00377000000003,
(‘1827’,‘经度’):116.30907000001}
我想要的是

pq={<Timestamp: 2008-02-02 13:30:46>: {('1059', 'latitude'): 40.064889999999998,
                                ('1059', 'longitude'): 116.56359,
                                ('1466', 'latitude'): 39.92163,
                                ('1466', 'longitude'): 116.32633,
                                ('1563', 'latitude'): 39.864249999999998,
                                ('1563', 'longitude'): 116.39328,
                                ('1827', 'latitude'): 40.003770000000003,
                                ('1827', 'longitude'): 116.30907000000001}}
pq={<Timestamp: 2008-02-02 13:30:46>: {'1059':{'latitude: 40.064889999999998,'longitude': 116.56359},
                                       '1466' :{'latitude': 39.92163,'longitude': 116.32633},
                                       '1563':{'latitude': 39.864249999999998, 'longitude':116.39328},
                                       '1827':{'latitude': 40.003770000000003,'longitude': 116.30907000000001}}
pq={:{'1059':{'纬度:40.064889999998,'经度':116.56359},
‘1466’:{‘纬度’:39.92163,‘经度’:116.32633},
“1563”:{“纬度”:39.86424999998,“经度”:116.39328},
‘1827’:{‘纬度’:40.00377000000003,‘经度’:116.3090700000001}

我该怎么做?

您想通过拆分元组键来生成子片段

要自动创建子CT,请使用

通过迭代要修改的字典项,可以使用元组解包来拆分元组键:

>>> import collections
>>> subpq = collections.defaultdict(dict)
>>> for (number, type), value in pq.values()[0].items():
...  subpq[number][type] = value
... 
>>> subpq
defaultdict(<type 'dict'>,
            {'1059': {'latitude': 40.06489, 'longitude': 116.56359},
             '1827': {'latitude': 40.00377, 'longitude': 116.30907},
             '1563': {'latitude': 39.86425, 'longitude': 116.39328},
             '1466': {'latitude': 39.92163, 'longitude': 116.32633}})
导入集合 >>>subpq=集合。默认dict(dict) >>>对于(编号、类型),pq.values()[0]中的值。项(): …子Q[编号][类型]=值 ... >>>次级Q defaultdict(, {'1059':{'latitude':40.06489,'latitude':116.56359}, ‘1827’:{‘纬度’:40.00377,‘经度’:116.30907}, ‘1563’:{‘纬度’:39.86425,‘经度’:116.39328}, ‘1466’:{‘纬度’:39.92163,‘经度’:116.32633})
您尝试过什么?这很简单。您需要翻阅原始词典,提取所需数据,然后构建一个新词典。如果不为您实际编写代码,很难更具体,而且我认为如果我这样做,您将学不到那么多。而且,这不是有效的dict密钥。@dansalmo我相信如果您print
pq
——键是一个
Timestamp
类,它可以这样打印自己。@Lennart Regebro,我曾尝试提取元组中的第一列,并可能搜索回字典pq并构建一个新字典。但为此,我尝试了类似这样的方法。print set(np.asarray(pq[x].keys()[:,0])这似乎增加了很多开销。从元组到numpy数组再到集合的转换。@dansalmo,时间戳是一个有效的dict键。时间戳在pandas(python中的空间数据分析工具)中被广泛使用。非常感谢。你给了我领导。我可以按照你说的写一些东西。x=df.index[0]#数据帧的第一个索引,它是pq.values()[0]中(数字、类型)值的时间戳subpq[x]={}
。items():
如果数字不在subpq[x]中。keys():
subpq[x]。update({number:{type:value}})
否则:
subpq[x][number]。update({type:value})