Перемещение элементов в словаре Python в другой индекс - PullRequest
0 голосов
/ 28 июня 2018

Если у меня есть словарь, например, такой:

dicta={1:['a','a','a'],2:['b,'b','b'],'N':['n','n','n'],3:['c','c','c']}

и я хочу, чтобы буква N находилась на последней позиции, так как позже я конвертирую это слово в df. Есть ли способ сдвинуть его вниз?

Нахождение индекса N в порядке: index=list(dicta.keys()).index('N')

но тогда как бы вы сделали (в псевдокоде) dicta.position[-1] = dicta[index] бит?

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Словари не считаются упорядоченными, если вы не используете Python 3.7+. Если вы используете Python 3.7+, лучшим решением будет @ Kasramvd .

В противном случае вы можете вручную переместить строку вниз, используя pd.concat:

dicta = {1:['a','a','a'], 2:['b','b','b'],
         'N': ['n','n','n'], 3:['c','c','c']}

df = pd.DataFrame.from_dict(dicta, orient='index')
df = pd.concat([df.drop('N', axis=0), df.loc[['N'], :]], axis=0)

print(df)

   0  1  2
1  a  a  a
2  b  b  b
3  c  c  c
N  n  n  n
0 голосов
/ 24 июля 2018

Когда на порядок словаря нельзя положиться (Python <3.7), вы также должны убедиться, что числа отсортированы. Вы можете взять ключи, удалить <code>'N', отсортировать оставшиеся ключи и добавить 'N' впоследствии. Затем используйте этот список в качестве явного column аргумента для DataFrame:

In [16]: dicta = {1:['a','a','a'], 2:['b','b','b'],
    ...:          'N': ['n','n','n'], 3:['c','c','c']}

In [17]: columns = list(dicta.keys())

In [18]: columns.remove('N')

In [19]: columns.sort()

In [20]: columns.append('N')

In [21]: pd.DataFrame(dicta, columns=columns)
Out[21]: 
   1  2  3  N
0  a  b  c  n
1  a  b  c  n
2  a  b  c  n
0 голосов
/ 28 июня 2018

Как уже упоминалось в комментариях, вы не должны полагаться на порядок словаря. Но если вы используете Python-3.6 +, поскольку в этих версиях словарь упорядочен по вставке, вы можете переместить этот элемент до конца, вставив нужный элемент, а затем переназначив его в словарь.

In [7]: dicta={1:['a','a','a'],2:['b','b','b'],'N':['n','n','n'],3:['c','c','c']}
In [8]: dicta['N'] = dicta.pop('N')

In [9]: dicta
Out[9]: 
{1: ['a', 'a', 'a'],
 2: ['b', 'b', 'b'],
 3: ['c', 'c', 'c'],
 'N': ['n', 'n', 'n']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...