python - 建立未知数量字典的函数
问题描述
根据具有与指定值匹配的值的列表数量创建必要数量的字典的最佳解决方案是什么?以及如何为字典指定直观的名称?
我犯了一个(菜鸟)错误。我硬编码了一组预定义的字典,忽略了潜在的未来案例。
我的片段:
primarytuesday = {}
secondarytuesday = {}
primarythursday = {}
secondarythursday = {}
coaches = [["4/27/1976", "Person One", "Site 1"], ["4/27/1976", "Person Two", "Site 1"],
["4/29/1976", "Person Three", "Site 1"], ["4/29/1976", "Person Four", "Site 1"]]
def sort_coaches(date, primary, secondary):
for eachsession in coaches:
if eachsession[0] == date:
if eachsession[2] in primary:
secondary[eachsession[2]] = eachsession[1]
else:
primary[eachsession[2]] = eachsession[1]
sort_coaches("4/27/1976", primarytuesday, secondarytuesday)
sort_coaches("4/29/1976", primarythursday, secondarythursday)
输出(按预期工作):
primarytuesday == {'Site 1': 'Person One'}
secondarytuesday == {'Site 1': 'Person Two'}
primarythursday == {'Site 1': 'Person Three'}
secondarythursday == {'Site 1': 'Person Four'}
问题:如果将特定日期的第三个值添加到列表中,则会出现问题,如...
coaches = [["4/27/1976", "Person One", "Site 1"], ["4/27/1976", "Person Two", "Site 1"], ["4/27/1976", "Person Three", "Site 1"]
["4/29/1976", "Person Four", "Site 1"], ["4/29/1976", "Person Five", "Site 1"]]
输出将第二个星期二的值更改为第三个个体,并完全摆脱第二个个体。有道理,但不是预期的。
我的第一个想法是废弃整个代码并为列表中的每个列表创建一个嵌套函数。这可能需要使用 zip,但我不完全确定。
顺便说一句:我确信有更有效的方法,而不是遍历整个列表并eachsession[0]
在 for 循环中与日期进行比较,但这可以作为我作为编码员的一个例子。
解决方案
您应该在函数的输出中使用列表而不是单个变量。这将允许您拥有任意数量的主要、次要、第三...条目,您可以在一天内使用索引来操作这些条目。
实际上,您可以一次性将整个内容转换为以日期为索引的主字典,然后使用该字典:
coaches = [["4/27/1976", "Person One", "Site 1"], ["4/27/1976", "Person Two", "Site 1"], ["4/27/1976", "Person Three", "Site 1"],
["4/29/1976", "Person Four", "Site 1"], ["4/29/1976", "Person Five", "Site 1"]]
sortedCoaches = dict()
for date,person,site in coaches:
day = sortedCoaches.setdefault(date,list())
d = next((d for d in day if site not in d),dict())
if not d: day.append(d)
d[site] = person
dayInfo = sortedCoaches["4/27/1976"]
[{'Site 1': 'Person One'}, {'Site 1': 'Person Two'}, {'Site 1': 'Person Three'}]
dayInfo = sortedCoaches["4/29/1976"]
[{'Site 1': 'Person Four'}, {'Site 1': 'Person Five'}]
推荐阅读
- laravel - 搜索拼写错误的单词 (Laravel)
- python - FileNotFoundError: [Errno 2] No such file or directory instabot 错误
- python - 如何使用熊猫从现有列中的值创建新的二分列
- gcc - 为没有 root 权限的 nvcc 指定 GCC 版本
- flutter - 从 Firebase 中删除快照
- python - 了解并发 Locust 用户
- javascript - 如何在 reactJS 中创建 onclick 函数?
- crowdsourcing - Toloka 质量控制中的“最近使用的值”
- python - 如果来自另一个对象的字符串包含子字符串,则从列表中删除项目
- node.js - NodeJs 监视文件 Chokidar 并使用 FFMPEG 创建缩略图,代码挂起。内存堵塞?