Я думаю, что ранее упомянутый ответ включения decimal=","
в pandas read_csv является предпочтительным вариантом.
Однако я обнаружил, что он несовместим с механизмом синтаксического анализа Python. например при использовании skiprow=
read_csv вернется к этому движку и, следовательно, вы не сможете использовать skiprow=
и decimal=
в том же самом read_csv, насколько я знаю. Кроме того, мне не удалось фактически заставить оператор decimal=
работать (возможно, из-за меня)
. Длинный путь, который я использовал для достижения того же результата, - это понимание списков, .replace
и .astype
. Главным недостатком этого метода является то, что он должен выполняться по одному столбцу за раз:
df = pd.DataFrame({'a': ['120,00', '42,00', '18,00', '23,00'],
'b': ['51,23', '18,45', '28,90', '133,00']})
df['a'] = [x.replace(',', '.') for x in df['a']]
df['a'] = df['a'].astype(float)
Теперь столбец a будет иметь ячейки типа float. Столбец b все еще содержит строки.
Обратите внимание, что используемая здесь .replace
не является пандой, а встроенной версией Python. Версия Pandas требует, чтобы строка была точным совпадением или регулярным выражением.
Существует фактический Тип данных под названием KeyValuePair, используйте как это
KeyValuePair<string, string> myKeyValuePair = new KeyValuePair<string,string>("defaultkey", "defaultvalue");
Одна возможная вещь, которую Вы могли сделать, использовать Словарь, возражают прямо из поля и затем просто расширяют его с помощью Ваших собственных модификаций:
public class TokenTree : Dictionary<string, string>
{
public IDictionary<string, string> SubPairs;
}
Это дает Вам преимущество не необходимости осуществить правила IDictionary для Вашего Ключа (например, ключевая уникальность, и т.д.).
И да Вы разобрались в понятии о конструкторе:)
Я думаю, чем Вы могли бы быть после (как литеральная реализация Вашего вопроса):
public class TokenTree
{
public TokenTree()
{
tree = new Dictionary<string, IDictionary<string,string>>();
}
IDictionary<string, IDictionary<string, string>> tree;
}
Вы действительно на самом деле говорили "список" значений ключа в Вашем вопросе, таким образом, Вы могли бы хотеть подкачать внутреннее IDictionary
с a:
IList<KeyValuePair<string, string>>
Существует KeyValuePair встроенный тип. На самом деле, это - то, что IDictionary предоставляет Вам доступ к тому, когда Вы выполняете итерации в нем.
кроме того, эта структура является едва деревом, находя, что более представительное имя могло бы быть хорошим осуществлением.
Всего одна вещь добавить к этому (хотя я действительно думаю, что Вам уже ответили на Ваш вопрос другие). В интересах расширяемости (так как все мы знаем это, произойдет в какой-то момент) можно хотеть проверить Составной Шаблон , Это идеально для работы с "Древовидными Структурами"..
Как я сказал, я знаю, что Вы только ожидаете один подуровень, но это могло действительно быть полезно для Вас, если позже необходимо расширить ^_^
Класс Словаря точно, что Вы хотите, корректный.
можно объявить поле непосредственно как Словарь, вместо IDictionary, но Вам решать
Используйте что-то вроде этого:
class Tree < T > : Dictionary < T, IList< Tree < T > > >
{
}
Это ужасно, но я думаю, что это даст Вам, что Вы хотите. Слишком плохой KeyValuePair изолируется.
Jay Mooney : универсальный класс Словаря в.NET является на самом деле хэш-таблицей, только с фиксированными типами.
код, который Вы показали, не должен убеждать никого использовать Хеш-таблицу вместо Словаря, так как обе части кода могут использоваться для обоих типов.
Для хеш-таблицы:
foreach(object key in h.keys)
{
string keyAsString = key.ToString(); // btw, this is unnecessary
string valAsString = h[key].ToString();
System.Diagnostics.Debug.WriteLine(keyAsString + " " + valAsString);
}
Для словаря:
foreach(string key in d.keys)
{
string valAsString = d[key].ToString();
System.Diagnostics.Debug.WriteLine(key + " " + valAsString);
}
И все равно для другого с KeyValuePair, просто используйте неуниверсальную версию для Хеш-таблицы и универсальную версию для Словаря.
, Таким образом, это столь же легко оба пути, но Объект использования Хеш-таблицы и для ключа и для значения, что означает Вас, упакует все типы значения, и у Вас нет безопасности типов, и Словарь использует универсальные типы и таким образом лучше.