Объединение элементов списка словаря - длина больше 2 - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть словарь со списками значений. Длина списков не должна быть больше 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 голосов
/ 30 апреля 2018

Лучший способ в этих задачах - использовать понимание (здесь словарь понимание), чтобы перестроить новый словарь с условием длины значения:

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 или меньше, иначе он перестраивается из первого элемента и объединенной строки остальных элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...