我有一个关于改变字典格式的问题。你知道吗
字典是:
{'index': 'cfs_nucleus_bespoke_88260', 'host': 'iaasn00018224.svr.us.jpmchase.net', 'source': '/logs/tomcat7inst0/localhost_tomcat7inst0_access_log2018-11-02.txt', '_time': '2018-11-02 19:46:50.000 EDT', 'count': '1'}
我想问一下,有没有一种方法可以让我更改如下格式:
{"column1":{'index': 'cfs_nucleus_', 'host': 'iaasn00018224.net'}, "column2":{'source': '/logs/tomcat7inst0/localhost_tomcat7inst0_access_log2018-11-02.txt'}, "column3":{'_time': '2018-11-02, 'count': '1'}}
您可以执行以下操作:
Try it online!
有几个移动部件相互作用以创建此解决方案:
Dict comprehensions
Python有一个巧妙的技巧,它允许在iterable和dict声明中嵌入
for in
循环,从而有效地循环和修改一组元素。在这里,外部迭代器是range(0, len(dict1), col_width)
:它经历一个从0开始的整数序列,并逐渐增加col_width
,直到它大于或等于列表的大小,该函数用于选择每个col_width
大小的dict段的起始索引。你知道吗元组解包
dict1.items()
很方便,因为它返回每个字典键及其值的2元组的dict view。稍后,我们利用元组解包k: v for k, v in d1_items[ ... ]
,其中一个变量元组被展平为两个变量,然后可以很容易地形成当前字典的键值对。(这仅适用于较新版本的Python。)List slicing
d1_items[col_num:col_num + col_width]
基本上是获取子列表的一种方法。语法相对简单:从位置col_num
开始,得到一个子列表,直到并排除元素col_num + col_width
(即大小为col_width
的子列表)。你知道吗Formatted string literals
在字符串前面加
f
使其成为格式化的字符串文本。在{
}
中的任何内容都被解释为文本Python语法(除了'
、{
和}
之外,它们的行为可能因上下文而异。)这里,在f'column{col_num // col_width + 1}'
中,它允许我们用除法和+1偏移量来标记每一列,从1开始计数,而不是从0开始。(这是python3.6的新特性)相关问题 更多 >
编程相关推荐