python - 如何将项目添加到具有扩展值的多维数组
问题描述
我正在做一个项目,我有一个包含名称、货币值等的列表列表。当用户输入一个值时,我在尝试更新主列表中的各个子列表时遇到了麻烦。
例如,我的列表包含 4 行(常量)和基于用户条目的不确定列数。我将整个程序包括在内,仅供参考,以防对它的外观有疑问:
spacing = '- ' * 45 # formatting for DONOR header
data_list = [['NAMES', 'DONATION AMOUNT', 'Number of Gifts', 'Avg Gifts'],
['Rudolph S', 1500, 3, 0],
['Josef M', 250, 5, 0],
['Joye A', 5000, 2, None],
['Joni M', 2750, 1, None],
['Rachelle L', 750, 3, None],
['Vena U', 1000, 7, None],
['Efrain L', 10000, 1, None],
['Mee H', 15000, 2, None],
['Tanya E', 50000, 1, None],
['Garrett H', 800, 2, None]]
def addtolist():
"""Method for sending 'Thank You' messages to Donors, using names *"""
while True:
print("Enter the name of the person you are writing to (or enter 'list' to see a list of names or Q to quit) ")
fname_prompt = input("First Name: ").strip().capitalize()
if fname_prompt.upper() == "Q":
break
elif fname_prompt.lower() == "list":
if len(data_list) - 1 % 2 != 0:
for i in range(0, int(len(data_list) - 1 / 2)):
cut_off = int((len(data_list)) / 2)
if i == 0:
print(spacing)
print('{:>44s}'.format(str(data_list[i][0])))
print(spacing)
elif cut_off + i >= len(data_list):
continue
else:
print('{:>30s}'.format(data_list[i][0]), '{:>35s}'.format(data_list[cut_off + i][0]))
else:
if i == 0:
print(spacing)
print('{:>20s}'.format(str(data_list[i])))
print(spacing)
else:
print('{:>15s}'.format(data_list[i][0]), '{:>30s}'.format(data_list[cut_off + i][0]))
else:
lname_prompt = input("Last Name: ").strip().capitalize()
if lname_prompt.upper() == "Q":
break
elif lname_prompt.lower() == "list":
if len(data_list) - 1 % 2 != 0:
for i in range(0, int(len(data_list) - 1 / 2)):
cut_off = int((len(data_list)) / 2)
if i == 0:
print(spacing)
print('{:>44s}'.format(str(data_list[i][0])))
print(spacing)
elif cut_off + i >= len(data_list):
continue
else:
print('{:>30s}'.format(data_list[i][0]), '{:>35s}'.format(data_list[cut_off + i][0]))
else:
if i == 0: # for each item in list / 2 (5 x)
print(spacing)
print('{:>20s}'.format(str(data_list[i][0])))
print(spacing)
else:
print('{:>15s}'.format(data_list[i][0]), '{:>30s}'.format(data_list[cut_off + i][0]))
else:
full_name = fname_prompt + " " + lname_prompt
if full_name != "List List" or full_name != "list ":
name_found = False
for vals in data_list:
if full_name in vals:
name_found = True
else:
name_found = False
if name_found is False:
add_name = input("That name is not in the Donor list. Do you want to add it to the list? ").upper()
if add_name == "Y":
data_list.append([full_name])
if len(data_list) - 1 % 2 != 0:
for i in range(0, int(len(data_list) - (len(data_list) - 2) / 2)):
cut_off = int((len(data_list)) / 2)
if i == 0:
print(spacing)
print('{:>44s}'.format(str(data_list[i][0])))
print(spacing)
elif cut_off + i >= len(data_list):
print('{:>30s}'.format(data_list[i][0]))
continue
else:
print('{:>30s}'.format(data_list[i][0]), '{:>35s}'.format(data_list[cut_off + i][0]))
else:
if i == 0: # for each item in list / 2 (5 x)
print(spacing)
print('{:>20s}'.format(str(data_list[i][0])))
print(spacing)
else:
print('{:>15s}'.format(data_list[i][0]), '{:>30s}'.format(data_list[cut_off + i][0]))
donation_amt = int(input("Enter in the donation amount from Donor {0}: $".format(full_name)))
print('{0} has donated ${1}'.format(full_name, donation_amt))
data_list.append(donation_amt) # difficulty HERE
print(data_list)
我遇到困难的主线在最后带有评论“这里很难”。
data_list.append(donation_amt) # difficulty HERE
我正在尝试这样做,以便当用户输入新名称和新的捐赠金额(或者如果他们只是选择现有名称并附加捐赠金额),程序可以将货币价值附加/插入到关联的子列表(它附加到的名称)。我现在设置它的方式只是将数字量附加到较大列表的末尾,但我未能成功地将值附加到子列表......以前有没有人做过这样的事情?
解决方案
看来您有 4 个静态列和不确定的行数。
您是否考虑过使用字典列表,例如 json 文档?
data_list = [{
'NAME':'Rudolph S',
'DONATION AMOUNT' : 1500,
'Number of Gifts' : 3,
'Avg Gifts' : 0
},{
'NAME':'Josef M',
'DONATION AMOUNT' : 250,
'Number of Gifts' : 5,
'Avg Gifts' : None
}]
等等。如果您可以引用各个键并更新它们的值,而不是使用列表和索引值,我认为您可能会更轻松地处理数据。
推荐阅读
- ios - 错误:此应用是使用 iOS 12.0 SDK 构建的。从 2019 年 3 月开始,所有提交到 App Store 的 iOS 应用程序都必须使用 iOS 12.1 SDK 构建
- python - O(n) 复杂度算法,无需 remove() 方法即可从未排序列表中删除值的实例
- java - 如何在带有firebase的android studio中创建一个类似“编辑个人资料图像”页面的火种/大黄蜂?
- elasticsearch - 如果它们包含特定字段,如何限制 Filebeat 仅将日志发送到 ELK?
- php - 如何在 php 中修复“未捕获的错误:在 null 上调用成员函数 insertOne()”
- python - 访问可调用迭代器对象的内容
- javascript - 如何在javascript / Google Apps脚本(GAS)中以点表示法打印出未知深度数组的所有对象属性
- php - Laravel Excel 传递变量
- java - Spring Boot 访问 application.properties 以进行 JUnit 测试
- dart - 怎么买卡?