Python 如何合并每个都是字符串列表的行。。不包括重复项

Python 如何合并每个都是字符串列表的行。。不包括重复项,python,list,join,merge,encode,Python,List,Join,Merge,Encode,我正在处理音乐数据,需要为回归算法Python3编码流派分类。我想编码的类别为0或1,如果一个流派分类。数据位于数据框中,包含重复的值。我想将所有行合并到一个唯一值列表中,然后使用get_dummies对每个记录进行编码 第一次尝试: for i in x: a = genres + list(i) genres.append(a) 第二次尝试: x = list of genres (like below) [j for i in x for j in i] list(it

我正在处理音乐数据,需要为回归算法Python3编码流派分类。我想编码的类别为0或1,如果一个流派分类。数据位于数据框中,包含重复的值。我想将所有行合并到一个唯一值列表中,然后使用get_dummies对每个记录进行编码

第一次尝试:

for i in x:
    a = genres + list(i)
    genres.append(a)
第二次尝试:

x = list of genres (like below)
[j for i in x for j in i]

list(itertools.chain(x))
输入:

第1行=[“嘻哈”、“摇滚”、“流行摇滚”、“乡村”]

第2行=[“流行”、“摇滚”、“流行摇滚”、“另类摇滚”]

预期产出:

new list = ['hip hop', 'rock','country','pop','pop rock','alternative rock']
最终产量

      | hip hop | rock | country | pop | pop rock | alternative rock |
row 1 |   1     | 1    |  1      | 0   | 1        |  0               |
row 2 |   0     | 1    |  0      | 1   | 1        |  1               |

如果元素的顺序不重要,则可以将每个列表视为查找列表,然后将其转换回列表:

def merge(r1, r2):
    return list(set().union(r1, r2))


row_1 = ['hip hop', 'rock','pop rock','country']
row_2 = ['pop', 'rock', 'pop rock' ,'alternative rock']

print(merge(row_1, row_2))
输出

但是,如果外观顺序确实重要,则可以执行以下操作:

from itertools import chain

def merge_with_order(r1, r2):

    seen = set()
    result = []
    for e in chain(r1, r2):
        if e not in seen:
            seen.add(e)
            result.append(e)

    return result


row_1 = ['hip hop', 'rock','pop rock','country']
row_2 = ['pop', 'rock', 'pop rock' ,'alternative rock']

print(merge_with_order(row_1, row_2))
输出

如果你喜欢一个班轮考虑使用:


谢谢你的回复。这很有帮助。我需要对数据框中的行列表执行此操作。
from itertools import chain

def merge_with_order(r1, r2):

    seen = set()
    result = []
    for e in chain(r1, r2):
        if e not in seen:
            seen.add(e)
            result.append(e)

    return result


row_1 = ['hip hop', 'rock','pop rock','country']
row_2 = ['pop', 'rock', 'pop rock' ,'alternative rock']

print(merge_with_order(row_1, row_2))
['hip hop', 'rock', 'pop rock', 'country', 'pop', 'alternative rock']
from itertools import chain
from collections import OrderedDict


def merge_with_order(r1, r2):
    return list(OrderedDict.fromkeys(chain(r1, r2)))