使用Python 2.7,我有一个任意长的元组列表(t),其中:
t[0] --> first_name_id
t[1] --> first_name
t[2] --> last_name_id
t[3] --> last_name
first_name_id和first_name在集合中应该是唯一的,但last_name_id和last_name仅在first_name_id / first_name中是唯一的。
正如你在下面看到的那样,有一个简的姓氏是#34;史密斯"但是id为3而对于" Tom" "史密斯"的ID是" 0"
t = [('1', 'Tom', '0', 'Smith'),
('1', 'Tom', '1', 'Johnson'),
('1', 'Tom', '2', 'Williams'),
('32', 'Jane', '0', 'Brown'),
('32', 'Jane', '1', 'David'),
('32', 'Jane', '3', 'Smith'),
.
.
.
]
我正在考虑将其合并到字典中,以便通过传递first_name和last_name快速找到ID元组:
所以我的数据结构是:
data_structure = {
"Tom": {"first_name_id": "1", "surnames": {"Smith": "0", "Johnson": "1", "Williams": "3"}},
"Jane": {"first_name_id": "32", "surnames": {"Brown": "0", "David": "1", "Smith": "3"}}
}
output = data_structure["Tom"]["first_name_id"],data_structure["Tom"]["surnames"]["Williams"]
print output
>>> ('1', '3')
答案 0 :(得分:0)
你在想这样的事吗?
output = {}
for first_name_id, first_name, last_name_id, last_name in t:
if not first_name in output:
output[first_name] = {'first_name_id':first_name_id,'surnames':{}}
output[first_name]['surnames'][last_name] =
答案 1 :(得分:0)
由于您的数据已经在firstnames和firstname id上排序,因此您可以直接对数据应用itertools.groupby
以对firstnames和firstname id进行分组,然后根据其余的组数据构建inners dicts:
from collections import defaultdict
from itertools import groupby
d = defaultdict(dict)
for (f_id, f), g in groupby(t, lambda x: (x[0], x[1])):
d[f]['first_name_id'] = f_id
d[f]['surnames'] = dict((k, v) for _, _, v, k in g)
defaultdict(<class 'dict'>,
{'Jane': {'first_name_id': '32',
'surnames': {'Brown': '0',
'David': '1',
'Smith': '3'}},
'Tom': {'first_name_id': '1',
'surnames': {'Johnson': '1',
'Smith': '0',
'Williams': '2'}}})