从你的代码不正确indendation
除了(这可能是一个当您将其粘贴到问题中时出错),只有一个实际问题:
car_tuple = (line[0])
这不会构成元组,但只会将line[0]
分配给car_tuple
。为了使一个元组,你需要包括一个逗号:
car_tuple = (line[0],)
然而,这不会改变后,你将有当您试图解开元组的问题,所以你应该只使用一个空字符串作为第二元组项目:
car_tuple = (line[0], '')
那么,你的代码产生正确的结果:
Worse Manufacturer is: Ford
Cars:
1909
1958 Edsel
1971 Pinto
1995 Explorer
2000 Excursion
这为S.通过使用更多的Python技巧,你可以做到这一点更简单。这是我的8线解决方案,加上注释,所以你明白这是怎么回事:
# We’re going to use `defaultdict` to handle the whole “when there is
# already an element in the dictionay, append to the list, otherwise
# create a new entry with a single list item” thing. `defaultdict` just
# allows us to append without having to manually initialize new keys.
from collections import defaultdict
# Files should always be opened with the `with` statement, to ensure
# that they are closed correctly afterwards. Since we’re reading, we
# don’t need to specify the open mode ('r' is the default).
with open('cars.txt') as f:
# We initialize our dictionary as a defaultdict, where each item
# is automatically initialized with an empty list.
cars = defaultdict(list)
for line in f:
# We put strip and split in a single line. Since we always
# get at least two values from your file format, we can just
# unpack the values directly. We collect additional unpacked
# values (so index 2 or above) in a list called `rest` (the
# star symbol does that). That list may be empty, or not.
year, manufacturer, *rest = line.strip().split()
# We just append (because it’s a defaultdict, we don’t need
# to initialize it) to the list of the manufacturer a tuple
# with the unpacked year, and the joined values of the rest.
cars[manufacturer].append((year, ' '.join(rest)))
# Now that we collected our cars dictionary, we want to find the
# manufacturer that has the highest number of cars. Since `cars` maps
# the key manufacturer to the a list of cars (car tuples actually), we
# essentially want to get the dictionary item with the maximum length
# in the item value. We use the built-in `max` function with a custom
# key function for this.
# `cars.items()` returns a sequence of key/value tuples of the
# dictionary. We want to get the maximum value of those key/value
# tuples, and as a metric for “maximum value” we use a function that
# takes this tuple `(manufacturer, listOfCarTuples)` and returns the
# length of that `listOfCarTuples`. So in the key function, `x` is that
# tuple, so `x[1]` is the list of car tuples. So the length of that list
# is the metric of the current dictionary item which we want to get the
# maximum from.
worst = max(cars.items(), key=lambda x: len(x[1]))
# `worst` is now `(manufacturer, listOfCarTuples)` where
# `len(listOfCarTuples)` has the maximum value.
print(worst)
在你的问题粘贴而不是把链接,这将可能是我们很快无效共享网站上的文件的一个小样本,然后你的问题也会发生。 – bosnjak
这种从/到文件存储和读取数据的最佳方式是使用现有的方法。将数据保存为JSON或YAML并从文件中读取。 – RvdK
请注意,数据链接不会将未使用FileDropper注册的人员导向文件。这不好。 –