在字典中对相同的值进行分组并给每个标记(或将它们分配到一个新的字典中)
Group same values in a dictionary and give each a mark (or assign them into a new dict)
假设我有这样一本字典
origin_dict={0:[],1:[],2:['bus'],3:['bus'],4:['bus'],5:[],6:[],7:['train'],8:['train'],9:['train'],10:[],11:[],12:['train'],13:['train'],14:[]}
我想按相同的值对它们进行分组,但前提是它们是连续的。
new_dict={0:{2:'bus',3:'bus',4:'bus'},1:{7:'train',8:'train',9:'train'},2:{12:'train',13:'train'}}
有人有什么想法吗?
from collections import defaultdict
from operator import itemgetter
from itertools import groupby
origin_dict = {0: [], 1: [], 2: ['bus'], 3: ['bus'], 4: ['bus'], 5: [], 6: [], 7: [
'train'], 8: ['train'], 9: ['train'], 10: [], 11: [], 12: ['train'], 13: ['train'], 14: []}
result = defaultdict(list)
for k, v in origin_dict.iteritems():
key = "".join(sorted(v))
if key != "":
result[key].append(k)
solution = defaultdict(dict)
index = 0
for k, data in result.iteritems():
for k1, g in groupby(enumerate(data), lambda (i, x): i - x):
for v2 in map(itemgetter(1), g):
solution[index][v2] = k
index += 1
print origin_dict
print dict(solution)
这是我的简单有效的解决方案。
#! /usr/bin/python
origin_dict={0:[],1:[],2:['bus'],3:['bus'],4:['bus'],5:[],6:[],7:['train'],8:['train'],9:['train'],10:[],11:[],12:['train'],13:['train'],14:[]}
dict_out = {}
int_dict = {}
mine_keys = [key for key in origin_dict.keys() if not origin_dict[key] == []]
prev_val = False
keyind = 0
for key in origin_dict:
if not key in mine_keys:
if prev_val == True:
dict_out[keyind] = int_dict
prev_val = False
keyind += 1
int_dict = {}
else :
prev_val = True
int_dict[key]=origin_dict[key]
print origin_dict
print dict_out
假设我有这样一本字典
origin_dict={0:[],1:[],2:['bus'],3:['bus'],4:['bus'],5:[],6:[],7:['train'],8:['train'],9:['train'],10:[],11:[],12:['train'],13:['train'],14:[]}
我想按相同的值对它们进行分组,但前提是它们是连续的。
new_dict={0:{2:'bus',3:'bus',4:'bus'},1:{7:'train',8:'train',9:'train'},2:{12:'train',13:'train'}}
有人有什么想法吗?
from collections import defaultdict
from operator import itemgetter
from itertools import groupby
origin_dict = {0: [], 1: [], 2: ['bus'], 3: ['bus'], 4: ['bus'], 5: [], 6: [], 7: [
'train'], 8: ['train'], 9: ['train'], 10: [], 11: [], 12: ['train'], 13: ['train'], 14: []}
result = defaultdict(list)
for k, v in origin_dict.iteritems():
key = "".join(sorted(v))
if key != "":
result[key].append(k)
solution = defaultdict(dict)
index = 0
for k, data in result.iteritems():
for k1, g in groupby(enumerate(data), lambda (i, x): i - x):
for v2 in map(itemgetter(1), g):
solution[index][v2] = k
index += 1
print origin_dict
print dict(solution)
这是我的简单有效的解决方案。
#! /usr/bin/python
origin_dict={0:[],1:[],2:['bus'],3:['bus'],4:['bus'],5:[],6:[],7:['train'],8:['train'],9:['train'],10:[],11:[],12:['train'],13:['train'],14:[]}
dict_out = {}
int_dict = {}
mine_keys = [key for key in origin_dict.keys() if not origin_dict[key] == []]
prev_val = False
keyind = 0
for key in origin_dict:
if not key in mine_keys:
if prev_val == True:
dict_out[keyind] = int_dict
prev_val = False
keyind += 1
int_dict = {}
else :
prev_val = True
int_dict[key]=origin_dict[key]
print origin_dict
print dict_out