2017-02-20 56 views
1

Я хотел бы кодировать со следующей таблицейКакая структура данных используется в python для кодирования таблицы с двумя столбцами?

two column table

я имею в виду иметь функцию, где можно ввести, например, «тропической зоне», а затем, чтобы вернуть мне n = 0.8 и n1 = 0.9 я думал сделать используй словарь. Является ли это наиболее подходящей структурой данных для использования в этом случае?

def navigationcoefficients (type,key): 
    if type == 'n': 
     dict = {'unrestricted navigation': 1, 'summer zone': 0.9, 'tropical zone': 0.8, 'coastal zone': 0.8, 'sheltered area': 0.65} 
     return dict[key] 
    if type == 'n1': 
     dict = {'unrestricted navigation': 1, 'summer zone': 0.95, 'tropical zone': 0.9, 'coastal zone': 0.9, 'sheltered area': 0.65} 
     return dict[key] 

n = navigationcoefficients('n','unrestricted navigation') 
n1 = navigationcoefficients('n1','unrestricted navigation') 

Заранее спасибо

+1

Nope. Используйте что-то из [numpy] (https://docs.scipy.org/doc/numpy-1.10.1/user/basics.rec.html), или если вы хотите: [pandas] (http: //pandas.pydata .org /). Ofc также зависит от вашего прецедента и шаблонов доступа, которые вы не описали. – sascha

+0

вы можете использовать вложенный словарь, чтобы избавиться от функции 'navigationcoefficients'. Pandas может быть излишним для таблицы такого размера, но упрощает более сложные запросы ... – elcombato

+0

Согласитесь с elcombato, вложенный словарь будет хорошей идеей. Для таблиц больших размеров панды могли бы сделать трюк. Другая идея: список словарей, в которых каждый словарь имеет ключи «обозначение», «коэф. N» и «коэф. N0». – Elmex80s

ответ

1

Если я, что я предпочел бы установить класс для хранения данных строк, что-то вроде:

class NamedTuple: 
    def __init__(self, n, n1): 
     self.n = n 
     self.n1 = n1 

data = { 
    "Unrestricted navigation": NamedTuple(1.00, 1.00), 
    "Summerzone": NamedTuple(0.90, 0.95) 
    # ... 
} 

data["Summerzone"].n # access n of summer zone 

А позже вы можете добавить вспомогательные функции для данного класса.

Когда вычисление усложняется, вы можете обернуть list или dict с классом, чтобы контролировать ваши ряды более тонкие.

+0

очень интересный подход! Спасибо! –

+2

Для класса, который маленький/простой, я бы просто использовал 'NamedTuple' –

+0

@PaulH Хорошая идея! Изменено, спасибо! – Chazeon

0

Вы можете использовать комбинацию словаря, json и array.

пример:

array = [] 
navigationDetails = {"Unrestricted Navigations":{"n1":"1.00","n2":"1.00"}} 
array.append(navigationDetails) 
navigationDetails = {"Summer Zone":{"n1":"0.90","n2":"0.95"}} 
array.append(navigationDetails) 

Очки помнить

  • Таким образом, вы можете производить поиск с использованием зоны. Но это происходит гораздо медленнее, поскольку вам нужно пройти все элементы.
  • Используйте это, если вы не хотите удалять или изменять элементы.
+0

Я не думаю, что словари с одним ключом - хорошая идея. Лучше вы вводите третий ключ, называемый «навигационной нотации». – Elmex80s

+0

Это зависит от вашего требования. Если вы хотите искать часто, чем вам нужен другой словарь, который отслеживает ваши индексы навигационной нотации и использует их для поиска. Если вы хотите удалить из середины массива, и если последовательность имеет значение для вас, вы можете создать структуру связанного списка. –