PYTHON: объединяющие значения, если похожие значения найдены в диктонарном - PullRequest
0 голосов
/ 02 мая 2019

ПИТОН: У меня есть словарь как:

abc = {[
    ["buy", "contract_type"], ["apple", "product"], ["from", "o"],
    ["Alex", "trader_name"], ["heeb", "trader_name"], ["of", "o"],
    ["APPLE", "counter_party"], ["INC", "counter_party"]]}

Что я хочу, так это в основном конкатенирующие значения для аналогичных ключей в диктонарном

new_abc = {[
    ["buy", "contract_type"], ["apple", "product"], ["from", "o"],
    ["Alex heeb", "trader_name"], ["of", "o"],
    ["APPLE INC", "counter_party"]]}

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

Попробуйте это:

from itertools import groupby    

abc = [
["buy", "contract_type"], ["apple", "product"], ["from", "o"],
["Alex", "trader_name"], ["heeb", "trader_name"], ["of", "o"],
["APPLE", "counter_party"], ["INC", "counter_party"]]

new= [] 
for k, g in groupby(sorted(abc, key=lambda x:x[1]),key =lambda x:x[1]): 
    new.append(['',k]) 
    for i in g: 
        new[-1][0] += i[0]+ ' '

new будет вашим ожидаемым результатом:

[['buy ', 'contract_type'],
 ['APPLE INC ', 'counter_party'],
 ['from of ', 'o'],
 ['apple ', 'product'],
 ['Alex heeb ', 'trader_name']]
0 голосов
/ 02 мая 2019

Попробуйте это:

d = {}
for a, b in abc:
    d.setdefault(b, []).append(a)
new_abc = [ [ ' '.join(d.pop(b)), b ] for a, b in abc if b in d ]

Но, как уже указывал @Sayse, это также объединит значения 'o' 'from' и 'of':

[['buy', 'contract_type'], ['apple', 'product'], ['from of', 'o'],
 ['Alex heeb', 'trader_name'], ['APPLE INC', 'counter_party']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...