如何创建一个列表作为字典的键,并将其添加到不同的明细表中?

2024-06-17 08:49:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个for循环,它运行在一个CSV文件中,获取某些元素,并基于两个变量创建一个字典

代码:

for ind, row in sf1.iterrows():
    sf1_date = row['datekey']
    sf1_ticker = row['ticker']
    company_date[sf1_ticker] = [sf1_date]

例如,在for循环的第一次迭代中,sf1_ticker = 'AAPL'sf1_date = '2020/03/01',下一次,sf1_ticker = 'AAPL'sf1_date = '2020/06/01',我如何使字典中的'AAPL'键等于['2020/03/01', '2020/06/01']


Tags: 文件csv代码in元素fordate字典
3条回答

您可以创建一个新词典,并将日期添加到列表中(如果存在)。否则,创建条目

ticker_dates = {}

# Would give ticker_dates = {"AAPL":['2020/03/01', '2020/06/01']}
for ind,row in sft1.iterrows():
    sf1_ticker = row['ticker']
    sf1_date = row['datekey']
    if sf1_ticker in ticker_dates:
       ticker_date[sf1_ticker].append(sf1_date)
    else:
       ticker_dates[sf1_ticker] = [sf1_date] 
       
   

您可以使用defaultdict,它可以设置为向任何不存在的项添加空列表。否则,它的作用通常类似于词典

from collections import defaultdict

rows = [
    ['AAPL', '2020/03/01'], 
    ['AAPL', '2020/06/01'],
    ['GOOGL', '2021/01/01']
]

company_date = defaultdict(list)
for ticker, date in rows:
    company_date[ticker].append(date)

print(company_date)
# defaultdict(<class 'list'>, {'AAPL': ['2020/03/01', '2020/06/01'], 'GOOGL': ['2021/01/01']})

看起来,当你说“键”时,你实际上是指“值”。字典的键是用来在字典中查找值的东西。在您的情况下,ticker是键,日期列表是值,例如,您需要一个如下所示的字典:

{'AAPL': ['2020/03/01', '2020/06/01'].
 'MSFT': ['2020/04/01', '2020/09/01']}

这里的字符串AAPL和MSFT是字典键。日期列表是与每个键关联的值

您的代码无法构造这样的字典,因为它正在为键分配新值。以下代码将在字典company_date中创建一个新的键(如果该键在字典中不存在),或者在该键已存在的情况下替换现有值(如果该键已存在):

company_date[sf1_ticker] = [sf1_date]

您需要附加到dict中的值列表,而不是替换当前列表(如果有)。有两种方法可以做到这一点^{}是一个:

company_date = {}
for ind, row in sf1.iterrows():
    sf1_date = row['datekey']
    sf1_ticker = row['ticker']
    company_date.setdefault(sf1_ticker, []).append(sf1_date)

另一种方法是使用^{}列表:

from collections import defaultdict

company_date = defaultdict(list)
for ind, row in sf1.iterrows():
    sf1_date = row['datekey']
    sf1_ticker = row['ticker']
    company_date[sf1_ticker].append(sf1_date)

相关问题 更多 >