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})