如何像字典一样实现元素之间的一对一映射,但也允许重复?

How to achieve one to one mapping between elements just like dictionaries but allowing duplicates also?

我有一个 excel 文件,其中包含与此类似的数据:

ColumnA   ColumnB
   A        aaa
   B        eee
   A        ccc
   A        ddd
   B        fff

我们可以看到在columnA[=38]中有多个行具有相同的数据AB =] 但对应于columnB.

中的不同数据

我需要找到一种方法,使 columnAcolumnB 的数据相互映射,例如A:aaa,B:eee,A:ccc,A:ddd,B:fff

我知道字典不允许重复,因此尝试 defaultdictcollections 构造,但它会给出输出 defaultdict(<type 'list'>, {u'A': [u'aaa', u'ccc'], u'B': [u'eee']}) 我不需要,因为它将 columnA 数据映射到 columnB 的多个元素。 我特别需要的是列表中的数据,例如

data[0] will have A:aaa
data[1] will have B:eee

我用defaultdict的代码如下:

from xlrd import open_workbook
from collections import defaultdict

data = defaultdict(list)

def get_data():
    filename = "Demo.xlsx"
    exl_file = open_workbook(filename)
    sheet = exl_file.sheet_by_index(0)
    for row_index in range(1,4):
            col_a_data = sheet.cell(row_index,0).value
            col_b_data = sheet.cell(row_index,1).value
            data[col_a_data].append(col_b_data)

get_data()

print data

Python 中是否有任何数据结构可以帮助我实现这一点?

您是否只想将数据存储为字典列表? 如果是这样,这应该有效(未经测试)。如果没有,您希望如何存储您的数据?

from xlrd import open_workbook


data = []

def get_data():
    filename = "Demo.xlsx"
    exl_file = open_workbook(filename)
    sheet = exl_file.sheet_by_index(0)
    for row_index in range(1,4):
            col_a_data = sheet.cell(row_index,0).value
            col_b_data = sheet.cell(row_index,1).value
            data.append({col_a_data:col_b_data});

get_data()

print data