组合字典列表元素的长度大于2

时间:2018-04-30 19:02:42

标签: python list dictionary

我有一个包含值列表的字典。列表的长度不能大于2.我需要做的是组合从第二个元素开始的列表元素并与下一个元素连接,直到列表的长度等于2.我的尝试下面的工作,但它看起来这样做可以更容易,我只是没有看到它。

testDict = {'60075566': ['A', u'foo'], 
            '60074783': ['B', u'one', u'two', u'three', u'four', u'five'], 
            '60069249': ['C', u'test1', u'test2', u'test3'], 
            '60075936': ['D', u'bar'], '60073582': []}


for key in testDict:
    while len(testDict[key]) > 2:
        dataSave = testDict[key][0]         #####save first element of the dictionary value#######
        newList = testDict[key]             #####create new list of values to change#######
        newList.pop(0)                      #####pop the first element, previosuly saved#####
        newData = ','.join(newList )        #####Join remaining elements#####
        testDict[key] = [dataSave, newData] #####Replace old value with new value

以上是答案,但我觉得可以改进:

{'60069249': ['C', u'test1,test2,test3'], '60075566': ['A', u'foo'], '60075936': ['D', u'bar'], '60074783': ['B', u'one,two,three,four,five'], '60073582': []}

1 个答案:

答案 0 :(得分:2)

这些问题的最佳方法是使用理解(这里是一个字典理解)来重建一个带有值长度条件的新字典:

testDict = {'60075566': ['A', u'foo'],
            '60074783': ['B', u'one', u'two', u'three', u'four', u'five'],
            '60069249': ['C', u'test1', u'test2', u'test3'],
            '60075936': ['D', u'bar'], '60073582': []}

result = {k:(v if len(v)<=2 else [v[0],",".join(v[1:])]) for k,v in testDict.items()}

print(result)

打印:

{'60075936': ['D', 'bar'], '60073582': [], '60075566': ['A', 'foo'], 
 '60074783': ['B', 'one,two,three,four,five'], '60069249': ['C', 'test1,test2,test3']}

v if len(v)<=2 else [v[0],",".join(v[1:])]中,如果长度为2或更小,则列表/值不受影响,否则从第一个元素和其余元素的连接字符串重建。