我是一名非常热爱编程的本科生。我在练习中遇到了一个问题,我不知道如何解决。
问题如下:
给定一个正整数列表,返回一个字典,其中包含数字 1-9 作为键,以该数字开头的数字作为值。注意:并非所有数字都可以使用
示例:
Input: [12, 34, 22, 24, 55, 67, 108, 999]
Output: {1: [12, 108], 2: [22, 24], 3: [34], 5: [55], 6: [67], 9: [999] }
示例 2:
Input: [10, 20, 30, 40]
Output: {1: [10], 2: [20], 3: [30], 4: [40]}
我的回答是这样的:
def digit_dictionary(nums):
num = nums.split(',')
list_num = []
for i in range(1,10):
if i == nums[0]:
list.update({i:nums[0]})
return list_num
测试用例是这样的:
Traceback (most recent call last):
File "/grade/run/test.py", line 12, in test_sparse_2
self.assertEqual(digit_dictionary(n), a)
File "/grade/run/bin/digit_dictionary.py", line 2, in digit_dictionary
num = nums.split(',')
AttributeError: 'list' object has no attribute 'split
还有
Traceback (most recent call last):
File "/grade/run/test.py", line 19, in test_sparse
self.assertEqual(digit_dictionary(n), a)
File "/grade/run/bin/digit_dictionary.py", line 2, in digit_dictionary
num = nums.split(',')
AttributeError: 'list' object has no attribute 'split'
还有
Traceback (most recent call last):
File "/grade/run/test.py", line 33, in test_full
self.assertEqual(digit_dictionary(n), a)
File "/grade/run/bin/digit_dictionary.py", line 2, in digit_dictionary
num = nums.split(',')
AttributeError: 'list' object has no attribute 'split'
还有
Traceback (most recent call last):
File "/grade/run/test.py", line 26, in test_empty
self.assertEqual(digit_dictionary(n), a)
File "/grade/run/bin/digit_dictionary.py", line 2, in digit_dictionary
num = nums.split(',')
AttributeError: 'list' object has no attribute 'split'
我已经搜索过 Python 词典,但我仍然感到困惑。谢谢大家的帮助!
请您参考如下方法:
您可以对排序列表使用函数 gropby():
from itertools import groupby
l = [12, 34, 22, 24, 55, 67, 108, 999]
f = lambda x: int(str(x)[0])
l = sorted(l, key=f)
{k: list(g) for k, g in groupby(l, key=f)}
# {1: [12, 108], 2: [22, 24], 3: [34], 5: [55], 6: [67], 9: [999]}
