Создание словаря из n элементов списка - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть список, в котором каждый элемент списка разделен на 3 поля, разделенных символом '|Предположим, мой список: ['Северная Америка |23 |Соединенные Штаты »,« Южная Америка |12 |Бразилия »,« Европа |51 |Греция '………] и т. Д.

Используя этот список, я хочу создать словарь, в котором первое поле каждого элемента будет иметь значение, а второе поле каждого элемента - ключ.

Как добавить эти элементы списка в словарь с помощью цикла for?

Мой ожидаемый результат будет {23 ':' Северная Америка ',' 12 ':' Южная Америка ',' 51 ':' Европа '}

Ответы [ 3 ]

0 голосов
/ 06 ноября 2019

Предполагая, что вы находитесь в Python, если вы знаете, что такое разделитель, вы можете использовать string.split (), чтобы разбить строку на список и перейти оттуда.

my_dict = {}
for val in my_list:
    words = val.split(" | ")
    my_dict[words[1]] = words[0]

Для другихязыки, вы можете взять индекс первой «|», подстроку с начала, чтобы дать вам ваше значение, а затем взять индекс второй строки, чтобы дать вам ключ. В Java это выглядело бы так:

Map<String, String> myDict = new DopeDataStructure<String, String>();
for(String s : myArray){
    int pos = s.indexOf("|");
    String val = s.substring(0, pos - 1);
    String rest = s.substring(pos + 2);
    String key = rest.substring(0, rest.indexOf("|") - 1);
    myDict.put(key, val);
}

РЕДАКТИРОВАТЬ: вполне возможно, что есть более эффективные способы решения проблемы на других языках, это просто самый простой метод, который я знаю из головы

0 голосов
/ 06 ноября 2019

Использование Python в понимании диктов

data = ['North America | 23 | United States', 'South America | 12 | Brazil',]
# Spliting each string in list by "|" and setting its 1st index value to dict key and 0th index value to dict value
res = {i.split(" | ")[1]: i.split(" | ")[0] for i in data}
print (res)

Надеюсь, это поможет и будет иметь значение!

0 голосов
/ 06 ноября 2019

Как насчет этого:

var myList = new List<string>() { "North America | 23 | United States", "South America | 12 | Brazil", "Europe | 51 | Greece" };
var myDict = myList.Select(x => x.Split('|')).ToDictionary(a => a[1], a => a[0]);
...