我有这本词典:
requestIdleCallback
我尝试将其转换为.rst文件作为子弹列表,例如:
d = {'B': {'ticket': ['two', 'three'], 'note': ['nothing to report']}, 'A': {'ticket': ['one'], 'note': ['my note']}, 'C': {'ticket': ['four'], 'note': ['none']}}
我看了this approach但我无法将翻译成子弹列表
感谢所有
答案 0 :(得分:3)
对于类似您具体示例的内容,请参阅:
>>> for key, value in d.items():
... print('* {}'.format(key))
... for k, v in value.items():
... print(' * {}:'.format(k))
... for i in v:
... print(' * {}'.format(i))
...
* B
* note:
* nothing to report
* ticket:
* two
* three
* A
* note:
* my note
* ticket:
* one
* C
* note:
* none
* ticket:
* four
答案 1 :(得分:1)
对你的问题更通用的解决方案是递归函数:
def bullet_list(elements, level=0, indent_size=4):
try:
items = elements.items()
except AttributeError:
for bullet_point in elements:
yield '{}* {}'.format(' ' * (indent_size * level), bullet_point)
else:
for bullet_point, sub_points in items:
yield '{}* {}'.format(' ' * (indent_size * level), bullet_point)
yield from bullet_list(sub_points, level=level + 1, indent_size=indent_size)
for line in bullet_list(d):
print(line)
输出:
* A
* note
* my note
* ticket
* one
* C
* note
* none
* ticket
* four
* B
* note
* nothing to report
* ticket
* two
* three
但请注意,在最新版本的python之前,词典中不保证有序。
答案 2 :(得分:1)
丑陋和肮脏
def bullet(d, depth=1):
for k,v in d.items():
print(''.join([depth * ' ', '* ', k]))
if isinstance(v, dict):
bullet(v, depth+1)
else:
for e in v:
print(''.join([depth * ' ', ' * ', e]))
答案 3 :(得分:0)
我会将任务分为三个步骤: -
1 - 对字典进行排序 - 因为这是不可能的,最好创建一个密钥列表,对该列表进行排序然后迭代它们
2 - 检查票证是否存在以及票证中的for项目是否打印
3 - 检查是否存在音符然后打印每个项目以备注。