使用 python 用相应的索引替换字典中的键
Replacing keys in a dict with its corresponding indices using python
我有一个列表和字典,如下所示
col_indices = [df.columns.tolist().index(col) for col in cat_cols]
print(col_indices) #returns [1,5]
t = {'thisdict':{
"Ford":"brand",
"Mustang":"model",
1964:"year"
},
'thatdict':{
"jfsak":"af",
"jhas":"asjf"}}
基本上,我想用相应的列索引替换 dict 键。
例如:列索引 1 属于 thisdict
,列索引 5 属于 thatdict
。
我正在尝试类似下面的方法,但没有用。
key_map_dict = {'1':'thisdict','5':'thatdict'}
d = {(key_map_dict[k] if k in key_map_dict else k):v for (k,v) in t.items() }
不用我手动定义key_map_dict
。无论如何找到匹配的列名并获取索引位置并自动在字典中进行替换?我不能为百万行和 200 列的大数据框架执行此操作。
我希望我的输出如下所示
{1:{
"Ford":"brand",
"Mustang":"model",
1964:"year"
},
5:{
"jfsak":"af",
"jhas":"asjf"}}
您可以使用 zip
和听写理解:
col_indices = [1, 5]
t = {'thisdict': {"Ford": "brand", "Mustang": "model", 1964: "year"},
'thatdict': {"jfsak": "af", "jhas": "asjf"}}
output = {i: v for i, v in zip(col_indices, t.values())}
print(output)
# {1: {'Ford': 'brand', 'Mustang': 'model', 1964: 'year'}, 5: {'jfsak': 'af', 'jhas': 'asjf'}}
另一种选择
df_list = df.columns.tolist()
t = {df_list.index(k): v for k, v in t.items()}
顺便说一句,如果你想结合你之前的问题,你可以试试这个
df_list = df.columns.tolist()
b = {df_list.index(tk): {v: k for k, v in tv.items()} for tk, tv in t.items()}
要用 DataFrame 中的列索引替换字典 t
中的键,您可以在 DataFrame 中查找相应列的索引并将其分配给 t
中的值,如下所示:
import pandas
# Provided t
t = {'thisdict': {
"Ford": "brand",
"Mustang": "model",
1964: "year"
},
'thatdict': {
"jfsak": "af",
"jhas": "asjf"}
}
# Assumed df looks something like this
dct = {'thisdict': ['abc'],
'thatdict': ['def']}
df = pandas.DataFrame(dct)
output = {df.columns.get_loc(name): dct for name, dct in t.items()}
print(output)
输出:
{0: {'Ford': 'brand', 'Mustang': 'model', 1964: 'year'}, 1: {'jfsak': 'af', 'jhas': 'asjf'}}
注意:这依赖于您的 DataFrame 中存在的 t
中的所有键,但是如果 t
不是 DataFrame 的 one-to-one,添加检查将相对简单。
我有一个列表和字典,如下所示
col_indices = [df.columns.tolist().index(col) for col in cat_cols]
print(col_indices) #returns [1,5]
t = {'thisdict':{
"Ford":"brand",
"Mustang":"model",
1964:"year"
},
'thatdict':{
"jfsak":"af",
"jhas":"asjf"}}
基本上,我想用相应的列索引替换 dict 键。
例如:列索引 1 属于 thisdict
,列索引 5 属于 thatdict
。
我正在尝试类似下面的方法,但没有用。
key_map_dict = {'1':'thisdict','5':'thatdict'}
d = {(key_map_dict[k] if k in key_map_dict else k):v for (k,v) in t.items() }
不用我手动定义key_map_dict
。无论如何找到匹配的列名并获取索引位置并自动在字典中进行替换?我不能为百万行和 200 列的大数据框架执行此操作。
我希望我的输出如下所示
{1:{
"Ford":"brand",
"Mustang":"model",
1964:"year"
},
5:{
"jfsak":"af",
"jhas":"asjf"}}
您可以使用 zip
和听写理解:
col_indices = [1, 5]
t = {'thisdict': {"Ford": "brand", "Mustang": "model", 1964: "year"},
'thatdict': {"jfsak": "af", "jhas": "asjf"}}
output = {i: v for i, v in zip(col_indices, t.values())}
print(output)
# {1: {'Ford': 'brand', 'Mustang': 'model', 1964: 'year'}, 5: {'jfsak': 'af', 'jhas': 'asjf'}}
另一种选择
df_list = df.columns.tolist()
t = {df_list.index(k): v for k, v in t.items()}
顺便说一句,如果你想结合你之前的问题
df_list = df.columns.tolist()
b = {df_list.index(tk): {v: k for k, v in tv.items()} for tk, tv in t.items()}
要用 DataFrame 中的列索引替换字典 t
中的键,您可以在 DataFrame 中查找相应列的索引并将其分配给 t
中的值,如下所示:
import pandas
# Provided t
t = {'thisdict': {
"Ford": "brand",
"Mustang": "model",
1964: "year"
},
'thatdict': {
"jfsak": "af",
"jhas": "asjf"}
}
# Assumed df looks something like this
dct = {'thisdict': ['abc'],
'thatdict': ['def']}
df = pandas.DataFrame(dct)
output = {df.columns.get_loc(name): dct for name, dct in t.items()}
print(output)
输出:
{0: {'Ford': 'brand', 'Mustang': 'model', 1964: 'year'}, 1: {'jfsak': 'af', 'jhas': 'asjf'}}
注意:这依赖于您的 DataFrame 中存在的 t
中的所有键,但是如果 t
不是 DataFrame 的 one-to-one,添加检查将相对简单。