在Python中,我目前有一个字典(它有一个列表中的列表中的复合键),当我打印它时,它看起来类似于以下内容:
第一个值是数字,第二个值(A或B)表示文本值,数字是它们出现在此字典的原始列表列表中的次数 .
我需要的是一种以下列格式打印出数据的方法 . 对于字典中数值的唯一出现(即,在本例中为第一个和第三个值),打印出关联的文本值及其计数 . 所以看起来像
键入:111文本计数
A 4
B 10
Total: 14
键入:112文本计数
A 3
Total: 3
我知道当与If语句结合使用时,我需要使用某种while循环 . 根据我迄今为止所研究的内容(与我迄今为止为Python所教授的内容相关),我需要使用if语句编写循环以仅打印我想要打印的内容 . 所以我需要在它们第一次出现时打印新的数字值,而不是它们出现的第二个(或第三个或第四个等)时间 . 我假设部分执行此操作,我将它们放在变量中,然后将它们与当前值进行比较 . 如果它们是相同的,我不打印它们,但如果它们不同,我打印旧数值的“总数”,将其添加到总数中,然后打印新的数值 .
5 回答
我写了一个简单的函数来打印你想要的东西 . 它需要字典作为第一个参数,类型作为第二个int(例如
fancy_print({'111, A': 4, '112, A': 3,'111, B': 10}, 111)
):我会使用对象的层次结构,而不是一个平面字典,例如dict中的dicts,dict中的元组等 .
考虑一个dict中的dicts示例:
现在您可以更轻松地访问内容 . 例如'111'中的显示属性:
通过组合两个for循环可以在某种程度上创建所需的输出:
使用给定数据运行上述操作将导致以下输出:
您可以使用元组作为键 . 而不是
'111, A'
试试('111', 'A')
它允许您轻松遍历字典,查找与第一个或第二个键值匹配的字典 . 就像你拥有的一样,除了更改密钥:
现在,你是完全正确的:你需要一个变量来存储总数,你需要循环遍历字典,你需要在循环中使用条件语句 . 你究竟在问什么?
您可以像这样遍历字典:
如果保留字符串键,则需要从每个键中提取两个值,您可以使用
split
. (如果使用元组,则无需执行此步骤):您需要测试第一个键值是否与所需的数字匹配,然后您要打印字母和值d [k],并更新总变量:
所以你可以把它放在一起,在这样的函数中:
如果使用元组而不是键,则可以删除拆分步骤,只需使用k [0]和k [1]得到两个值:
既然这是家庭作业,我会给你几乎答案的代码:
输出:
这需要非常小的修改才能到达您需要的位置 .
EDIT :“解释
for k in [k for k in myDict if k.split(',')[0]==prefix]:
如何运作”该声明分为两部分 . 第一个是简单的for循环(
for k in …
),它像往常一样工作 . 第二个是列表理解[k for k in myDict if k.split(',')[0]==prefix]
. 此列表理解可以重写为:然后你会这样做
关于
for k in myDict
有一些话要说 . 当您像这样迭代dict
时,只迭代键 . 这与for k in myDict.keys()
相同 . 区别在于myDict.keys()
返回一个新的列表(myDict
中的键)然后迭代,而for k in myDict
直接遍历myDict
中的所有键在我看来,更好的数据结构将是:
然后你可以轻松打印字典:
要将您的dict转换为此表单,我将使用
defaultdict
: