早教吧 育儿知识 作业答案 考试题库 百科 知识分享

关于Python字典里的value问题是有{'a':[1,2,3,4],'b':[11,22,33]},即a中有4个值,b中有3个值要弄成{'a':[1,1,1,2,2,2,3,3,3,4,4,4],'b':[11,11,11,11,22,22,22,22,33,33,33,33]}a和b中都要有3*4=12个值,就是每个value的

题目详情
关于Python 字典里的value
问题是有{'a':[1,2,3,4],'b':[11,22,33]}, 即a中有4个值, b中有3个值
要弄成{'a': [1,1,1,2,2,2,3,3,3,4,4,4], 'b':[11,11,11,11,22,22,22,22,33,33,33,33]}
a和b中都要有3*4 = 12个值, 就是每个value的长度要一样
▼优质解答
答案和解析
#先求最小公倍数,再整形
dic = {'sports' :{'s.basketball':['a', 'b', 'c', 'd'], 's.football':['aa', 'bb', 'cc', 'dd'] }, 
       'music':{'m.juzz':['e', 'f', 'g'], 'm.pop':['ee', 'ff', 'gg']}}
def gcd(a, b):
    if b == 0:
        return a
    else:
        return gcd(b, a % b)
def lcm(a, b):
    return a * b / gcd(a, b)
myLcm = 1#最小公倍数
for k in dic:
    for k2 in dic[k]:
        myLcm = lcm(len(dic[k][k2]), myLcm)
newDiv = {}
for k in dic:
    newDiv[k] = {}
    for k2 in dic[k]:
        newDiv[k][k2] = []
        l = len(dic[k][k2])
        for v in dic[k][k2]:
            for i in range(myLcm / l):
                newDiv[k][k2].append(v)
print newDiv