我有一个如下所示的数据框:
key text
0 title Lorem ipsum
1 header Lorem ipsum
2 description Lorem ipsum
.
.
.
.
10 pyramid.male Lorem ipsum
11 pyramid.male_surplus Lorem ipsum
12 pyramid.female Lorem ipsum
13 pyramid.female_surplus Lorem ipsum
.
.
.
.
29 jitterplot.title1 Lorem ipsum
30 jitterplot.metric_1.label Lorem ipsum
31 jitterplot.metric_1.tooltip Lorem ipsum
32 jitterplot.metric_2.label Lorem ipsum
33 jitterplot.metric_2.tooltip Lorem ipsum
键表示 JSON 文件中的键。JSON 结构应如下所示:
{
"title": "Lorem ipsum",
"header": "Lorem ipsum",
"description": "Lorem ipsum",
"pyramid": {
"male": "Lorem ipsum",
"male_surplus": "Lorem ipsum",
"female": "Lorem ipsum",
"female_surplus": "Lorem ipsum"
},
"jitterplot": {
"title1": "Lorem ipsum",
"metric_1": {
"label": "Lorem ipsum",
"tooltip": "Lorem ipsum"
},
"metric_2": {
"label": "Lorem ipsum",
"tooltip": "Lorem ipsum"
}
}
}
意思是.
,key
列中的 a 表示嵌套级别。
有没有一种“Pythonic”的方式来实现这一点?目前,我只是通过使用我编写的自定义解析器将每一行手动写入文本文件来破解它。但显然这不是非常可扩展的。
我准备了一个您可以阅读的示例 CSV,并添加了一些额外的列,如果它们有帮助的话。使用以下代码:
import pandas as pd
url = 'https://raw.githubusercontent.com/Thevesh/Display/master/i18n_sample.csv'
df = pd.read_csv(url)
df['n_levels'] = df['key'].str.count('\.') # column with number of levels
max_levels = df.n_levels.max() #
df = df.join(df['key'].str.split('.',expand=True))
df.columns = list(df.columns)[:-max_levels-1] + ['key_' + str(x) for x in range(max_levels+1)]
同样,但比其他答案简单一点:
def set_nested_value(d, keys, value):
for key in keys[:-1]:
d = d.setdefault(key, {})
d[keys[-1]] = value
result = {}
for _, row in df.iterrows():
set_nested_value(result, row["key"].split("."), row["text"])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句